161

所以,我有以下内容:

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);
    }

而且感觉很不对劲......有没有另一种方法来初始化这样的向量?

4

12 回答 12

279

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

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

例如,如果需要一个非零值4作为默认值,则:

std::vector<std::vector<int> > fog(
    ROW_COUNT,
    std::vector<int>(COLUMN_COUNT, 4));

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

std::vector<std::vector<int> > fog { { 1, 1, 1 },
                                    { 2, 2, 2 } };
                           
于 2013-07-15T20:24:50.070 回答
99

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

我们可以这样做

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

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

    return 0;
}
于 2018-05-22T23:57:44.047 回答
37

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

std::vector<std::vector<int>> fog(A_NUMBER, std::vector<int>(OTHER_NUMBER));
于 2013-07-15T20:25:11.770 回答
9

如前所述,一般语法是:

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]
     }
}

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

于 2018-03-04T09:25:11.020 回答
6

我认为最简单的方法是:

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

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

于 2019-06-17T22:12:18.403 回答
6

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

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

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

于 2019-08-02T12:15:08.203 回答
2

假设您要初始化一个具有 n 行和 m 列的二维整数向量,每个向量的值都为“ VAL

写成

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

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

于 2019-10-26T14:00:26.143 回答
2

这对我有用:

vector<vector<int>> minA{ROW_SIZE, vector<int>(COLUMN_SIZE, VALUE)};
于 2021-07-04T17:54:44.457 回答
1

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

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;
        }
}
于 2021-03-22T11:27:35.260 回答
0

这个答案将有助于在声明后轻松初始化二维向量。

int n=4,m=3;
int default_value = 0;

std::vector<std::vector<int>> matrix;

matrix.resize(m, std::vector<int>(n, default_value));
于 2021-09-10T20:22:32.177 回答
-1

带有 2D 向量的乘法表,前 10 用于 ROW,后 10 用于 COLUMN

std::vector<std::vector<int>> multiplication (10,std::vector<int>(10));
for(int i{0}; i<multiplication.size(); ++i){
    for(int j{0}; j<multiplication[i].size(); ++j){
        multiplication[i][j] = j * i;
    }
}

for(int i{1}; i < multiplication.size(); ++i){
    for(int j{1}; j < multiplication[i].size(); ++j){
        std::cout<<multiplication[i][j]<<"\t";
    }
    printf("\n");
}
于 2021-09-11T16:06:07.850 回答
-3

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


#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;
    }
}
于 2020-01-25T06:04:23.927 回答