初始化二维std :: vector

Fer*_*eak 97 c++ vector

所以,我有以下内容:

std::vector< std::vector <int> > fog;
Run Code Online (Sandbox Code Playgroud)

我非常天真地初始化它:

    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);
    }
Run Code Online (Sandbox Code Playgroud)

感觉非常错误......有没有另一种方法来初始化这样的矢量?

hmj*_*mjd 167

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

std::vector<std::vector<int> > fog(
    A_NUMBER,
    std::vector<int>(OTHER_NUMBER)); // Defaults to zero initial value
Run Code Online (Sandbox Code Playgroud)

如果其他值为零,4例如,则需要为默认值,则:

std::vector<std::vector<int> > fog(
    A_NUMBER,
    std::vector<int>(OTHER_NUMBER, 4));
Run Code Online (Sandbox Code Playgroud)

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

std::vector<std::vector<int> > fog { { 1, 1, 1 },
                                    { 2, 2, 2 } };
Run Code Online (Sandbox Code Playgroud)


jua*_*nza 33

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

std::vector<std::vector<int>> fog(A_NUMBER, std::vector<int>(OTHER_NUMBER));
Run Code Online (Sandbox Code Playgroud)


Jas*_*son 20

假设您要初始化2D向量m*n,初始值为0

我们可以做到这一点

#include<iostream>
int main(){ 
    int m = 2, n = 5;

    vector<vector<int>> vec(m, vector<int> (n, 0));

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 由于这个答案,刚刚获得了“好答案”。其他人已经给出了相同的答案,但是那些赞成这个答案的人可能和我在看到这篇文章时类似,我们没有意识到其他一些答案实际上是相同的答案。我认为这可能是因为三个原因:1)该代码可以复制、粘贴并立即运行2)“std::”使其更长,人们可能喜欢简短而直接的答案;3)变量的长命名让初学者感到困惑。我也是初学者,真的不知道我们需要 `std::` 有多重要,需要一个可运行的代码,这样我知道每个变量的作用 (4认同)

sar*_*pho 7

如前所述,一般语法为:

std::vector<std::vector<int> > v (A_NUMBER, std::vector <int> (OTHER_NUMBER, DEFAULT_VALUE))  
Run Code Online (Sandbox Code Playgroud)

在这里,向量“ v”可以可视化为二维数组,行为“ A_NUMBER”,列为“ OTHER_NUMBER”,其初始值设置为“ DEFAULT_VALUE”。

也可以这样写:

std::vector <int> line(OTHER_NUMBER, DEFAULT_VALUE)
std::vector<std::vector<int> > v(A_NUMBER, line)
Run Code Online (Sandbox Code Playgroud)

在二维矢量中输入值类似于在二维数组中输入值:

for(int i = 0; i < A_NUMBER; i++) {
     for(int j = 0; j < OTHER_NUMBER; j++) {
         std::cin >> v[i][j]
     }
}
Run Code Online (Sandbox Code Playgroud)

其他答案中已经说明了示例。


Abh*_*602 7

这对我有用:

vector<vector<int>> minA{ROW_SIZE, vector<int>(COLUMN_SIZE, VALUE)};
Run Code Online (Sandbox Code Playgroud)

  • 有趣的是,我认为我们应该用括号将“ROW_SIZE, vector&lt;int&gt;(COLUMN_SIZE, VALUE)”括起来,而不是大括号(我知道你的也可以)。 (2认同)

小智 6

推荐的方法是使用 fill 构造函数来初始化一个具有给定默认值的二维向量:

std::vector<std::vector<int>> fog(M, std::vector<int>(N, default_value));
Run Code Online (Sandbox Code Playgroud)

其中,M 和 N 是二维向量的维度。


小智 5

我认为最简单的方法是:

std::vector<std::vector<int>>v(10,std::vector<int>(11,100));
Run Code Online (Sandbox Code Playgroud)

10是外层或全局向量的大小,主要是,11是int类型的内层向量的大小,初始值初始化为100!这是我在堆栈上的第一个帮助,我认为它可以帮助某人。