初始化一个二维的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));