簡體   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