【发布时间】:2013-10-25 12:33:46
【问题描述】:
将整数数组初始化为给定值的最快方法是什么?
如果我有 char 数组,我可以使用 memset:
char a[N];
memset( a, value, N );
如果数组类型 != char 和值 != 0 或 -1,我无法执行 memset:
int a[N];
memset( a, value, N*sizeof(int) ); // INCORRECT!
所以我想知道是否有办法对其他数组类型进行类似的内存初始化。
【问题讨论】:
-
int x[] = {1,2,3,4}. -
最快的方法?在内联汇编中的代码中有一个数据块(在它之前有一个跳转语句)并将您的数组指向它。但说真的,保持标准:使用
std::fill -
最快如“我输入最快的东西”或“最快的速度”?如果是后者,数组初始化速度真的是您代码中的瓶颈吗?如果是这样(我觉得这不太可能)你应该重新设计你的代码。
-
Nik Bougalis,实际上两者都有:)。不,init 不是瓶颈,但可以通过许多小事情节省时间。
-
注意:
std::fill是关于在整个数组中复制相同的值(如memset),但也有std::generate允许您为每个索引生成不同的值。