有没有办法将一个基元数组(比如一个整数数组)初始化为0?不使用for循环?寻找不涉及for循环的简洁代码。
:)
答案 0 :(得分:17)
int array[10] = {}; // to 0
std::fill(array, array + 10, x); // to x
请注意,如果您想要更通用的方法来结束:
template <typename T, size_t N>
T* endof(T (&pArray)[N])
{
return &pArray[0] + N;
}
获得:
std::fill(array, endof(array), x); // to x (no explicit size)
应该提到std::fill
只是您试图避免的循环的包装器,并且= {};
可能会以这样的术语实现。
答案 1 :(得分:9)
是的,有可能。初始化方法取决于上下文。
如果要声明静态或本地数组,请使用= {}
初始化程序
int a[100] = {}; // all zeros
如果您使用new[]
创建数组,请使用()
初始值设定项
int *a = new int[100](); // all zeros
如果要在构造函数初始值设定项列表中初始化非静态成员数组,请使用()
初始值设定项
class C {
int a[100];
C() : a() // all zeros
{
...
}
};
答案 2 :(得分:1)
如果您希望所有值都为零,则可以使用memset。此外,如果您只想初始化为零,则可以将数组声明放置在内存的ZI部分中。
答案 3 :(得分:1)
如果数字为零,你也可以使用memset(虽然这更像是C风格):
int a[100];
memset(a, 0, sizeof(a));
答案 4 :(得分:0)
double A[10] = { value }; // initialize A to value
。
我不记得是否必须将值编译为常量。
不适用于自动数组
答案 5 :(得分:0)
有一些方法可以用不同的语法隐藏你正在做的事情,这就是其他答案给你的东西 - std::fill, memset, ={}
等。但是在一般情况下,(不包括编译器特定的技巧,如ZI) ,想一想编译代码需要做什么:
换句话说,需要以相当基本的方式成为一个循环。