繁体   English   中英

初始化向量数组,其中每个向量的大小均为0

[英]Initialize array of vectors where each vector is size 0

我有一个Thing类,带有一个Thing::Thing()构造函数和一个Thing::print() 我正在尝试创建arrayOfVectors ,以使数组内的每个std :: vector的大小均为0。构造函数正确地打印出每个矢量的大小,但print()方法没有。

我试过在数组中的每个向量上调用arrayOfVectors[n].clear()arrayOfVectors[n].assign(0,0) ,但是没有用。

Thing.hpp

class Thing {
private:
  std::vector<int>* arrayOfVectors;

public:
  Thing();
  void print() const;
};

Thing.cpp

Thing::Thing() {
  std::vector<int> arrayOfVectors[5];
  std::cout << arrayOfVectors[0].size() << std::endl; // 0
  std::cout << arrayOfVectors[1].size() << std::endl; // 0
  std::cout << arrayOfVectors[2].size() << std::endl; // 0
  std::cout << arrayOfVectors[3].size() << std::endl; // 0
  std::cout << arrayOfVectors[4].size() << std::endl; // 0
}

void Thing::print() const {
  std::cout << arrayOfVectors[0].size() << std::endl; // 0
  std::cout << arrayOfVectors[1].size() << std::endl; // 35183230189065
  std::cout << arrayOfVectors[2].size() << std::endl; // 33
  std::cout << arrayOfVectors[3].size() << std::endl; // 35
  std::cout << arrayOfVectors[4].size() << std::endl; // 108
}

main.cpp

int main() {
  Thing thing;
  thing.print();
  return 0;
}
 Thing::Thing() { std::vector<int> store[5]; ^^^^^^^^^^^^^^^^^^^^^^^^^ 

这是向量的数组。 它是一个自动变量。 自动变量在创建它们的块的末尾销毁。 在这种情况下,本地数组在构造函数调用的结尾被破坏。

 class Thing { private: std::vector<int>* arrayOfVectors; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 

这是指向向量的指针。 它不是数组。 它是Thing类的成员变量。 它是与本地store变量完全独立的变量。

您的构造函数永远不会初始化成员变量,因此,当您间接调用print成员函数中的指针时,程序的行为是不确定的。


如果希望您的类将数组作为成员变量,则可以这样编写:

class Thing {
private:
  std::vector<int> arrayOfVectors[5];

您无需声明构造函数,因为自动生成的构造函数完全可以满足您的要求-所有向量均为空。


如何避免在标头定义中设置特定数字(例如5)?

使用数组变量无法避免这种情况。 在编译时必须知道大小。 如果需要大小不固定的数组,则需要在动态存储中分配该数组。 创建动态数组的惯用方式是使用std::vector

class Thing {
private:
  std::vector<std::vector<int>> vectorOfVectors{5};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM