初始化一个二维的std :: vector

所以,我有以下几点:

std::vector< std::vector <int> > fog; 

我非常天真地初始化它:

  for(int i=0; i<A_NUMBER; i++) { std::vector <int> fogRow; for(int j=0; j<OTHER_NUMBER; j++) { fogRow.push_back( 0 ); } fog.push_back(fogRow); } 

它感觉非常错误…是否有另外一种方法来初始化这样的vector?

使用接受初始大小和默认值的std::vector::vector(count, value)构造函数:

 std::vector<std::vector<int> > fog( A_NUMBER, std::vector<int>(OTHER_NUMBER)); // Defaults to zero initial value 

如果要求其他值为零,例如4表示默认值,则:

 std::vector<std::vector<int> > fog( A_NUMBER, std::vector<int>(OTHER_NUMBER, 4)); 

我还应该提到在C ++ 11中引入的统一初始化,它允许使用{}来初始化vector和其他容器:

 std::vector<std::vector<int> > fog { { 1, 1, 1 }, { 2, 2, 2 } }; 

std::vector没有append方法,但是如果你想做一个向量包含int A_NUMBER向量,每个包含other_number零的那些,那么你可以这样做:

 std::vector<std::vector<int>> fog(A_NUMBER, std::vector<int>(OTHER_NUMBER));