C++ 初始化二维std::vector

C++ 初始化二维std::vector,c++,vector,C++,Vector,因此,我有以下几点: std::vector< std::vector <int> > fog; std::vectorfog; 我很天真地初始化它,就像: for(int i=0; i<A_NUMBER; i++) { std::vector <int> fogRow; for(int j=0; j<OTHER_NUMBER; j++) {

因此,我有以下几点:

std::vector< std::vector <int> > fog;
std::vectorfog;
我很天真地初始化它,就像:

    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);
    }
for(int i=0;i使用接受初始大小和默认值的构造函数:

std::vector<std::vector<int> > fog(
    ROW_COUNT,
    std::vector<int>(COLUMN_COUNT)); // Defaults to zero initial value
我还应该提到C++11中引入了统一初始化,它允许使用
{}
初始化
向量和其他容器:

std::vector<std::vector<int> > fog { { 1, 1, 1 },
                                    { 2, 2, 2 } };
                           
std::向量雾{{{1,1,1},
{ 2, 2, 2 } };

std::vector
中没有
append
方法,但是如果要使一个向量包含
一个
int
向量,其中每个向量都包含
其他
零,则可以执行以下操作:

std::vector<std::vector<int>> fog(A_NUMBER, std::vector<int>(OTHER_NUMBER));
std::vector fog(A_编号,std::vector(其他_编号));

如前所述,通用语法如下:

std::vector<std::vector<int> > v (A_NUMBER, std::vector <int> (OTHER_NUMBER, DEFAULT_VALUE))  
std::vector v(A_编号,std::vector(其他_编号,默认值))
这里,向量“v”可以可视化为二维数组,行数为“a_数”,列数为“其他_数”,初始值设置为“默认值”

也可以这样写:

std::vector <int> line(OTHER_NUMBER, DEFAULT_VALUE)
std::vector<std::vector<int> > v(A_NUMBER, line)
std::向量行(其他\u编号,默认值)
标准::向量v(A_数,行)
在二维向量中输入值与在二维数组中输入值类似:

for(int i = 0; i < A_NUMBER; i++) {
     for(int j = 0; j < OTHER_NUMBER; j++) {
         std::cin >> v[i][j]
     }
}
for(int i=0;i>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;
}
#包括
int main(){
int m=2,n=5;
向量vec(m,向量(n,0));
返回0;
}

我认为最简单的方法是:

std::vector<std::vector<int>>v(10,std::vector<int>(11,100));
标准向量(10,标准向量(11100));

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

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

std::vector fog(M,std::vector(N,默认_值));
在哪里,,
M和N是二维向量的维数。

假设要初始化一个二维整数向量,其中N行和M列的值分别为“VAL

写成

std::向量arr(n,向量(m,VAL));


该VAL可以是一个整型变量常量,例如100

My
c++STL
代码,用于初始化
5*3二维向量
,使用


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

#包括
使用名称空间std;
#包括
int main()
{//如果我们不想用0初始化一个二维向量;
向量v1(5,向量(3,0));

对于(inti=0;i,此代码片段将一个二维向量复制到另一个二维向量,并为我们提供了如何初始化二维向量的清晰图片

void copyVectorToVector(向量矩阵){
int rowNumber=matrix.size();
int columnNumber=矩阵[0]。大小();
向量结果(行数,向量(列数,0));

对于(int i=0;如果您不需要比
std::vector::max_size()
更多的空间,iI建议对2d向量使用1d向量实现。如果至少有一个答案不涉及复制内部向量,那就太好了:memset比memcpy快(如果new操作符内联,则calloc甚至更好)。因为这个答案,我得到了一个“好答案”。其他人已经给出了相同的答案,但那些支持这个答案的人可能与我在这篇文章中的观点相似,我们没有意识到其他一些答案实际上是相同的答案。我想这可能是因为三个原因:1)此代码可以立即复制、粘贴和运行2)
std::
使其更长,人们可能喜欢简短直接的答案;3)变量的长名称让初学者感到困惑。我也是一个初学者,不知道我们需要的
std::
,需要一个可运行的代码,所以我知道每个变量的作用。如果我将
std::vector
的存储类设置为
静态
std::vector<std::vector<int>> fog(M, std::vector<int>(N, default_value));

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