使用c++在多维向量中分配变量的最佳方法是什么

What is the best way to assign variables in a multidimensional vector using c++?

本文关键字:变量 最佳 方法 是什么 分配 c++ 向量 使用      更新时间:2023-10-16

我有一个类似的矩阵值

3   1   30
5   8   1
1   5   2
0   23  7

目前,我只知道将变量赋值给多维向量的方法。

vector<vector <int> > vec;
vec[0][0]=3;
vec[0][1]=1;
vec[0][2]=30;
.
.
vec[3][2]=7;

对于较小的矩阵值,这是可以的,但对于较大的值,这将变得更加困难。有没有其他方法可以在多维向量中分配变量。

编辑

我正在使用代码块,我得到了这个不寻常的错误

#include<iostream>
#include<vector>

int main()
{

    std::vector<std::vector<int> > vec = {{3,1,30},{5,8,1},{1,5,2},{0,23,7}};
    return 0;
}

错误

error: could not convert ‘{{3, 1, 30}, {5, 8, 1}, {1, 5, 2}, {0, 23, 7}}’ from ‘<brace-enclosed initializer list>’ to ‘std::vector<std::vector<int> >’

使用嵌套循环:例如:

for (int i = 0; i < MAX_VECTOR_SIZE; i++)
{
    for(int j = 0; j < MAX_SUB_VECTOR_SIZE; j++)
    {
        vec[i][j] = value;
    }
} 

不要忘记在必要的时候替换你的给定值。

std::vector<std::vector<int>> array2d{
    {3 ,  1,   30},
    {5,   8,   1},
    {1  , 5,   2},
    {0 ,  23,  7}
};

您可以进行

const std::vector<std::vector<int>> v = {
    {3,   1,   30},
    {5,   8,   1},
    {1,   5,   2},
    {0,   23,  7}
};

这在很大程度上取决于你想做什么——"最好"的方式取决于你的目标。但使用您问题中给出的示例,最方便的方法是通过std::initializer_list构造:

std::vector<std::vector<int>> vec = {{3,1,30},{5,8,1},{1,5,2},{0,23,7}};

您可以首先分配一维矢量

vector<int> vec1 {3,1,30};
vector<int> vec2 {5,8,1};
vector<int> vec3 {1,5,2};
vector<int> vec4 {0,23,7};

然后分配二维矢量

vector<vector<int>> vector2d;
vector2d.push_back(vec1);
vector2d.push_back(vec2);
vector2d.push_back(vec3);
vector2d.push_back(vec4);
  1. 如果您像在原始代码中那样使用手动初始化,请小心,您可能希望使用vectorpush_back,而不是直接调用[]:由于您的向量仍然为空,通过[]访问将导致分段错误。

  2. 如果您有C++11,请使用vector的构造函数来获取(聚合(initializer_list。这可能很方便:

    std::vector<std::vector <int> > vec;
    vec = { {3, 1 , 30},
            {5, 8 , 1 },
            {1, 5 , 2 },
            {0, 23, 7 } };
    

有关更多详细信息,请参阅此处。在这里,我假设您的矩阵按Row major顺序排列,即每个内部std::vector<int>代表矩阵的一行。

  1. 最后,如果可以的话,IMHO最简单的方法是使用像Eigen这样的线性代数库。Eigen提供了方便的初始化方法:例如使用<<(参见此处的示例(

编辑


编译错误:请确保至少启用C++11。如果使用g++,请将-std=c++11添加到编译器的标记中。