2

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

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

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

如果数组类型!= char 和值!= 0 或 -1,我不能做 memset:

int a[N];
memset( a, value, N*sizeof(int) ); // INCORRECT!

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

4

4 回答 4

7

使用std::fill

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

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

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

char a[N];
std::fill(a, a + N, value);
于 2013-10-25T12:37:56.953 回答
1

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

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

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

int x [50] = {};

这不同于:

int x[50];

因为当你指定一个初始化器时,未初始化的元素是值初始化的。如果您不指定初始化程序,则元素未初始化。

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

于 2013-10-25T12:51:30.753 回答
0

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

int a[N] 
memset(a, '0x00', N * sizeof (int))
于 2013-10-25T12:36:34.757 回答
0

您可以 memset 任何类型的对象/基元。毕竟,一切都存储在内存中。

也就是说,您必须了解您的编译器和处理器如何存储您正在记忆的东西,以预测您将获得什么。如果做错了,它是非常不便携和危险的。

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

于 2013-10-25T12:56:38.330 回答