将整数数组初始化为给定值的最快方法是什么?
如果我有 char 数组,我可以使用 memset:
char a[N];
memset( a, value, N );
如果数组类型!= char 和值!= 0 或 -1,我不能做 memset:
int a[N];
memset( a, value, N*sizeof(int) ); // INCORRECT!
所以我想知道是否有办法对其他数组类型进行类似的内存初始化。
使用std::fill
:
char a[N];
std::fill(std::begin(a), std::end(a), value);
请注意,std::begin
andstd::end
是从 C++11 开始定义的。
如果您使用的是 C++03,那么这将起作用:
char a[N];
std::fill(a, a + N, value);
没有比聚合初始化更快的方法了:
int x = {1,2,3,4,5,6};
如果要将所有内容初始化为零,则可以利用语法对整个数组进行值初始化:
int x [50] = {};
这不同于:
int x[50];
因为当你指定一个初始化器时,未初始化的元素是值初始化的。如果您不指定初始化程序,则元素未初始化。
仅仅因为没有比 更快int x[] = {....}
的方法,其他方法不一定更慢。您需要在实际平台上以发布模式进行分析才能确定。
我想您可以将 memset 与任何原始类型一起使用。
int a[N]
memset(a, '0x00', N * sizeof (int))
您可以 memset 任何类型的对象/基元。毕竟,一切都存储在内存中。
也就是说,您必须了解您的编译器和处理器如何存储您正在记忆的东西,以预测您将获得什么。如果做错了,它是非常不便携和危险的。
现代桌面处理器的很多性能取决于您引用的对象是否在缓存中。所以很难说它是否会更快。在其他条件相同的情况下,它可能会更快。