C ++中最快的数组初始化

时间:2013-10-25 12:33:47

标签: c++ arrays memory c++03

将整数数组初始化为给定值的最快方法是什么?

如果我有char数组,我可以使用memset:

char a[N];
memset( a, value, N );

如果数组类型为!= char和value!= 0或-1:

,则无法进行memset
int a[N];
memset( a, value, N*sizeof(int) ); // INCORRECT!

所以我想知道是否有办法对其他数组类型进行类似的内存初始化。

4 个答案:

答案 0 :(得分:7)

使用std::fill

char a[N];
std::fill(std::begin(a), std::end(a), value);

请注意,std::beginstd::end是从C ++ 11开始定义的。

如果您正在使用C ++ 03,那么这将起作用:

char a[N];
std::fill(a, a + N, value);

答案 1 :(得分:1)

没有比聚合初始化更快的方法:

int x = {1,2,3,4,5,6};

如果要将所有内容初始化为零,则可以利用语法对整个数组进行值初始化:

int x [50] = {};

这与:

不同
int x[50];

因为在指定初始化程序时,未初始化的元素是值初始化的。如果未指定初始值设定项,则元素未初始化。

仅仅因为没有比int x[] = {....}更快的方法,其他方法的速度并不一定正确。您需要在实际平台上以发布模式进行分析才能确定。

答案 2 :(得分:0)

我想你可以将memset与任何原始类型一起使用。

int a[N] 
memset(a, '0x00', N * sizeof (int))

答案 3 :(得分:0)

您可以设置任何类型的对象/原语。毕竟,一切都存储在内存中。

那就是说你必须要了解你的编译器和处理器如何存储你要记住的东西来预测你会得到什么。如果做错了,这是非常便携和危险的。

现代桌面处理器上的许多性能取决于您引用的对象是否在缓存中。因此很难说它是否会更快。在所有其他条件相同的情况下,它可能会更快。