初始化二维std :: vector

时间:2013-07-15 20:21:48

标签: c++ 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);
    }

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

11 个答案:

答案 0 :(得分:148)

使用接受初始大小和默认值的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 } };

答案 1 :(得分:29)

append中没有std::vector方法,但如果您想制作包含A_NUMBER intother_number个向量的向量,则每个向量都包含std::vector<std::vector<int>> fog(A_NUMBER, std::vector<int>(OTHER_NUMBER)); 零,那么你可以这样做:

{{1}}

答案 2 :(得分:13)

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

我们可以做到这一点

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

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

    return 0;
}

答案 3 :(得分:4)

一般语法如图所示:

std::vector<std::vector<int> > v (A_NUMBER, std::vector <int> (OTHER_NUMBER, DEFAULT_VALUE))  

这里,矢量'v'可以显示为二维数组,行'A_NUMBER',列'OTHER_NUMBER',其初始值设置为'DEFAULT_VALUE'。

也可以这样写:

std::vector <int> line(OTHER_NUMBER, DEFAULT_VALUE)
std::vector<std::vector<int> > v(A_NUMBER, line)

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

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

其他答案已经说明了例子......!

答案 4 :(得分:1)

我认为最简单的方法是:

std::vector<std::vector<int>>v(10,std::vector<int>(11,100));

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

答案 5 :(得分:1)

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

std::vector<std::vector<int>> fog(M, std::vector<int>(N, default_value));

在哪里, M和N是2D向量的尺寸。

答案 6 :(得分:1)

这对我有用:

vector<vector<int>> minA{ROW_SIZE, vector<int>(COLUMN_SIZE, VALUE)};

答案 7 :(得分:0)

假设您要初始化一个二维整数矢量,其中n行和m列的值分别为' VAL '

写为

  

std::vector<vector<int>> arr(n, vector<int>(m,VAL));

此VAL可以是整数类型变量常量,例如100

答案 8 :(得分:0)

vector<vector<int>> board;
for(int i=0;i<m;i++) {
    board.push_back({});
    for(int j=0;j<n;j++) {
        board[i].push_back(0);
    }
}

此代码段首先在每个转弯处插入一个空向量,在另一个嵌套循环中,它将元素推入由外部循环创建的向量内。希望这能解决问题。

答案 9 :(得分:0)

此代码片段将一个二维向量复制到另一个。并让我们清楚地了解如何初始化二维向量。

void copyVectorToVector(vector<vector<int>> matrix) {

        int rowNumber = matrix.size();
        int columnNumber = matrix[0].size();
        vector<vector<int>> result(rowNumber, vector<int> (columnNumber, 0));

        for(int i=0;i<matrix.size();i++){
            for(int j=0;j<matrix[i].size();j++){
                result[i][j] = matrix[i][j];
                cout<<result[i][j]<<" ";
            }
            cout<<endl;
        }
}

答案 10 :(得分:-1)

我的c++ STL代码用5*3 2-D vector初始化zero


#include <iostream>
using namespace std;
#include <vector>
int main()
{// if we wnt to initialise a 2 D vector with 0;

    vector<vector<int>> v1(5, vector<int>(3,0));

    for(int i=0;i<v1.size();i++) 
{
        for(int j=0;j<v1[i].size();j++)

           cout<<v1[i][j]<<" ";

            cout<<endl;
    }
}