我有一个像这样的矩阵值
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> >’
答案 0 :(得分:1)
使用嵌套for循环:例如:
for (int i = 0; i < MAX_VECTOR_SIZE; i++)
{
for(int j = 0; j < MAX_SUB_VECTOR_SIZE; j++)
{
vec[i][j] = value;
}
}
请勿忘记在必要时替换您给定的值。
答案 1 :(得分:1)
std::vector<std::vector<int>> array2d{
{3 , 1, 30},
{5, 8, 1},
{1 , 5, 2},
{0 , 23, 7}
};
答案 2 :(得分:1)
你可以做
const std::vector<std::vector<int>> v = {
{3, 1, 30},
{5, 8, 1},
{1, 5, 2},
{0, 23, 7}
};
答案 3 :(得分:1)
这在很大程度上取决于你想做什么 - “最好”的方式取决于你的目标。但是使用问题中给出的示例,最方便的方法是通过std::initializer_list
构造:
std::vector<std::vector<int>> vec = {{3,1,30},{5,8,1},{1,5,2},{0,23,7}};
答案 4 :(得分:0)
您可以先分配单维向量
vector<int> vec1 {3,1,30};
vector<int> vec2 {5,8,1};
vector<int> vec3 {1,5,2};
vector<int> vec4 {0,23,7};
然后分配2d向量
vector<vector<int>> vector2d;
vector2d.push_back(vec1);
vector2d.push_back(vec2);
vector2d.push_back(vec3);
vector2d.push_back(vec4);
答案 5 :(得分:0)
如果您使用原始代码中的手动初始化,请注意,您可能希望使用vector
&#39; push_back
而不是直接调用[]
:由于您的向量仍为空,因此通过[]
进行访问会导致分段错误。
如果您C++11
使用vector
的构造函数来获取(聚合)initializer_list
。这可以很方便:
std::vector<std::vector <int> > vec;
vec = { {3, 1 , 30},
{5, 8 , 1 },
{1, 5 , 2 },
{0, 23, 7 } };
有关详细信息,请参阅here。这里我假设你的矩阵是 Row-major 顺序,即每个内部std::vector<int>
代表矩阵的一行。