使用 for 循环是否比在 C++ 中将内容保存在向量中更快?
Is using for loops faster than saving things in a vector in C++?
很抱歉标题不好,但我实际上想不出更好的标题(欢迎建议(。
我得到了一个大网格(1000 * 1000 * 1000(。
for (int k = 0; k<dims.nz; k++);
{
for (int i = 0; i < dims.nx; i++)
{
for (int j = 0; j < dims.ny; j++)
{
if (inputLabel->evalReg(i, j, 0) == 0)
{
sum = sum + anotherField->evalReg(i, j, 0);
}
}
}
}
我遍历所有网格点,以查找哪些网格点在我的标签字段中具有值 0,并汇总另一个字段的相应值。
在此之后,我想将上面检测到的所有点设置为某个值。
再次基本上做相同的 for 循环会更快(而这次设置值而不是读取它们(,还是我应该将我得到的所有位置写入一个单独的向量(它必须在我们检测到某些东西的循环的每一步中改变大小(并简单地构建一个 for 循环,例如
for(int p=0; p<size_vec_1,p++)
{
anotherField->set(vec_1[p],vec_2[p],vec_3[p], random value);
}
关键是我不知道由于不同的数据,我的 routien 会对网格产生多大影响。可能是数据的一半或完全不同的数据。我可以对方法的速度进行通用估计,还是完全取决于我的值的分布?
关键是我不知道由于不同的数据,我的 routien 会对网格产生多大影响。
这里有一个可能有效的技巧:随机对inputLabel
进行采样,以近似地计算出有多少条目为 0。如果有几个,那么走"将索引放入向量"的方式。如果很多,那么走"再次扫描阵列"的方式。
它需要针对特定的计算机进行微调,两种情况之间的阈值应该是多少,要采集多少样本(它不应该太大,因为近似值会花费太多时间,但不应该太小而无法获得良好的近似值(等。
奖励技巧:获取缓存行对齐和缓存行大小的样本。这样,近似将花费类似的时间(因为它是内存限制的(,但近似会更好。
相关文章:
- C++模板来检查友元函数的存在
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 既然存在危险,为什么项目要使用-I include开关
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 我们可以访问一个不存在的联盟的成员吗
- C++:对不存在的命名空间使用命名空间指令
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- C++quit()函数中可能存在作用域问题
- C++擦除(如果存在)
- 在C++中将类(带有Vector成员)保存为二进制文件
- 使用导入的图像保存在 QT 中的 QLabel 中,保存 GUI 的状态
- 阵列不能两次将相同的名称保存,当要添加新字符串时,程序应检查以查看该名称是否已经存在
- 方法,该方法调用所有基类的同名方法(如果存在),并将返回值保存到列表中
- 什么设计模式将数据部分保存在持久存储 (SQL) 中,部分保存在 RAM(内存)中
- 是否存在可用于保存任何枚举值的整型?
- 将对象指针保存在 STL 容器中是否比将对象本身保存更好
- 从控制台保存信息,然后重新打开时,信息仍然存在