将向量初始化为零C ++ / C ++ 11


118

我知道在C ++ 11中,他们添加了将变量初始化为零的功能

double number = {}; // number = 0
int data{};  // data = 0

是否有类似的方法将std::vector固定长度的a 初始化为全零?


13
std::vector<int> vec(42);
avakar 2012年

9
顺便说一句,这不是c ++ 11中的新功能,您也可以在以前的版本中执行此操作
balki 2012年

Answers:


220

您不需要为此的初始化列表:

std::vector<int> vector1(length, 0);
std::vector<double> vector2(length, 0.0);

37
您不需要明确声明0吗?才vector(length)应该工作?
Daniel Gratzer 2012年

38
@jozefg:是的,它可以工作,尽管明确说明您希望代码执行的操作没有什么害处。
罗纳格2012年

1
@ronag我写了我自己的答案,因为如果int不是他正在使用的类型,那么在这种情况下明确表示并不一定是一个很好的例子。通用编程可以在C ++中使用,但是当我被提醒您可以完全忽略该参数时,我删除了答案。
约翰内斯·绍布

1
除非您在声明中指定其他值,如ronag所示,否则向量将自动初始化为0。
Nikos

是否可以有效地重新初始化全局向量的所有元素,ZERO而无需使用for循环?
Ankit Mishra

0

可以通过这种方式初始化具有结构,类或联合的向量

std::vector<SomeStruct> someStructVect(length);
memset(someStructVect.data(), 0, sizeof(SomeStruct)*length);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.