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

pyC*_*hon 92 c++ c++11

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

double number = {}; // number = 0
int data{};  // data = 0
Run Code Online (Sandbox Code Playgroud)

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

ron*_*nag 177

您不需要初始化列表:

std::vector<int> vector1(length, 0);
std::vector<double> vector2(length, 0.0);
Run Code Online (Sandbox Code Playgroud)

  • @jozefg:是的,它会起作用,尽管明确你希望代码做什么没有坏处. (31认同)
  • 你不需要明确说明0吗?只是`矢量(长度)`应该工作? (29认同)
  • @AnkitMishra是的,使用`std:fill(vector2.begin(), vector2.end(), 0)` (3认同)

Pet*_*ter 5

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

std::vector<SomeStruct> someStructVect(length);
memset(someStructVect.data(), 0, sizeof(SomeStruct)*length);
Run Code Online (Sandbox Code Playgroud)

  • 这对于内置类型(`int` 等)和 POD 来说是可以的,但是对于具有 **1.** 虚拟方法(因为 vtable 指针将被设置为 `0`)或 **2 的类来说会带来巨大的问题.** 某些字段不为“0”的不变性(通常由构造函数和方法强制执行)。 (8认同)
  • 除了对除普通类型之外的任何内容都是危险的之外,您编写的内容也是毫无意义的:构造大小为“length”的向量已经默认初始化了所有新元素。如果稍后需要默认初始化所有元素,或者将它们全部设置为其他值,则应使用“std::fill()”,因为它实际上是 C++ 且类型安全的。 (2认同)