我有一个阵列,
int a[size];
我想将所有数组元素设置为 1
因为数组中的某些索引已经设置为,1所以最好使用条件语句检查每个元素,如
for (int index = 0; index < size; index++)
{
if (a[index] != 1)
a[index] = 1;
}
Run Code Online (Sandbox Code Playgroud)
或者设置所有索引无论如何.会有什么区别?
Jon*_*eid 15
您的代码在循环中有两个路径,具体取决于每个值:
那不值得.写吧.
如果您愿意,也可以通过致电来完成同样的工作
std::fill(a, a + size, 1);
Run Code Online (Sandbox Code Playgroud)
如果数组是类型char而不是int,它可能会调用memset.特定于平台的实现fill可以提供编译器优化提示.
In *_*ico 14
只需将所有元素设置为1.首先是简单和可读性的代码.如果您发现代码运行速度太慢,请对其进行分析以查看需要进行哪些改进(尽管我非常怀疑性能问题可能来自将整数数组的元素设置为某个值).
我猜你只是在寻求理解,而不是在与一个真正的性能问题作斗争...这只是不会出现在测量中,这就是为什么:
通常,每当缓存的内存处理器(即当今大多数台式机CPU)必须向内存写入值时,必须从(相对较慢的)RAM中读取包含该地址的缓存行.然后通过CPU写入缓存来修改该值.整个高速缓存行最终写回主RAM.
当您在一系列连续地址(如阵列)上执行操作时,CPU将能够在写回之前在一个高速缓存行上非常快速地执行多个操作.然后它移动到下一个缓存行,该缓存行之前是预期获取的.
最有可能在写入值之前执行测试与仅仅写入有多种不同之处有几个原因:
所以只需编写代码即可.如果你仍然好奇,测量差异.
| 归档时间: |
|
| 查看次数: |
10838 次 |
| 最近记录: |