将原始数组初始化为一个值

时间:2010-04-12 21:22:52

标签: c++ integer primitive-types zero

有没有办法将一个基元数组(比如一个整数数组)初始化为0?不使用for循环?寻找不涉及for循环的简洁代码。

:)

6 个答案:

答案 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) ,想一想编译代码需要做什么:

  • 它需要知道你的记忆在哪里 块/数组启动;
  • 需要设置每个元素 依次阻止该值;
  • 需要反复检查是否 已到达街区的尽头。

换句话说,需要以相当基本的方式成为一个循环。