初始化二维 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);
}

而且感觉很不对劲... 还有其他方法来初始化这样的向量吗?

375414 次浏览

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

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

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

如前所述,一般语法如下:

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

例子已经在其他答案中陈述过了... ... !

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

我们可以的

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


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


return 0;
}

我认为最简单的方法是:

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

10是外部或全局向量的大小,它是主向量,11是 int 类型的内部向量的大小,初始值被初始化为100!这是我在栈上的第一次帮助,我想它帮助了某人。

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

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

在哪里, M 和 N 是二维向量的维数。

假设您想初始化一个二维整数向量,其中 n 行和 m 列各有值‘ VAL

写成

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

这个 VAL 可以是 整数类型变量不变,比如100

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


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

此代码段将一个二维向量复制到另一个二维向量。并给我们一个清晰的图片如何初始化二维矢量。

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

以下是对我有效的方法:

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

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

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


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


matrix.resize(m, std::vector<int>(n, default_value));

二维矢量乘法表 第一个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");
}

另外,如果有人只想将第一个 coll 值初始化为与其他默认值(比如1)不同的值(比如2)。

int rows = 3, cols = 4;
std::vector<std::vector<int>> matrix(rows, std::vector<int>(cols, 1));
for (int r = 0 ; r < rows ; r++) matrix[r][0] = 2;
2 1 1 1
2 1 1 1
2 1 1 1