使用c++在多维向量中分配变量的最佳方法是什么
What is the best way to assign variables in a multidimensional vector using c++?
我有一个类似的矩阵值
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);
-
如果您像在原始代码中那样使用手动初始化,请小心,您可能希望使用
vector
的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 } };
有关更多详细信息,请参阅此处。在这里,我假设您的矩阵按Row major顺序排列,即每个内部std::vector<int>
代表矩阵的一行。
- 最后,如果可以的话,IMHO最简单的方法是使用像Eigen这样的线性代数库。Eigen提供了方便的初始化方法:例如使用
<<
(参见此处的示例(
编辑
编译错误:请确保至少启用C++11
。如果使用g++
,请将-std=c++11
添加到编译器的标记中。
相关文章:
- 在派生类中使用基类的私有成员变量的最佳方法
- C++:将向量传递到构造函数以创建成员变量的最佳方法?
- C++中变量混叠的最佳方法
- 使用 gtest 框架在单元测试代码中检查目标对象的私有变量的最佳实践是什么?
- 在 gtests 中测试C++全局变量的最佳方法
- 定义常量变量的最佳方法
- 使用虚拟变量对 std::vector 内部循环进行切片的最佳方法
- 用于浮点值的最佳变量类型
- 许多变量,没有嵌套循环的最佳方法
- 最佳多线程全局变量管理
- 避免使用大量全局变量或使其易于访问和修改的最佳方法
- 为单个函数同时声明多个变量的最佳方式是什么
- 成员变量的初始化必须延迟。此类的最佳设计选择是什么?
- 具有许多成员变量的课程的最佳实践
- C++ - 在一个函数/文件中初始化变量然后在main()/另一个文件中使用它的最佳方法是什么?
- 在java/c++/c/actionscript-3应用程序中使用静态变量的最佳方法是什么?
- 这将是在将函数分配给变量或一次又一次地调用函数之间使用函数结果的最佳方式
- 访问成员变量或访问成员函数是最佳选择
- 获取私有实例变量容器成员值的最佳方式
- 布尔变量的最佳大小是多少