Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 多维向量_C++_Vector - Fatal编程技术网

C++ 多维向量

C++ 多维向量,c++,vector,C++,Vector,如何创建二维向量?我知道在2D数组中,我可以将其表示为: a[0][1]=98; a[0][2]=95; a[0][3]=99; a[0][4]=910; a[1][0]=98; a[1][1]=989; a[1][2]=981; a[1][3]=987; 如何使用C++ STL向量来实现这一点?< /P> < P> 向量A; 如果要定义行和列 向量a{11,2,4},{4,5,6},{10,8,-12}std::vectora;//正如Ari所指出的 std::vector< std

如何创建二维向量?我知道在2D数组中,我可以将其表示为:

a[0][1]=98;
a[0][2]=95;
a[0][3]=99;
a[0][4]=910;

a[1][0]=98;
a[1][1]=989;
a[1][2]=981;
a[1][3]=987;

如何使用C++ STL向量来实现这一点?< /P> < P> <代码>向量A;<代码>

如果要定义行和列

向量a{11,2,4},{4,5,6},{10,8,-12}
std::vector>a;//正如Ari所指出的
std::vector< std::vector< int > > a; // as Ari pointed
将其用于增长矩阵可能会变得复杂,因为系统无法保证所有内部向量的大小相同。当你在第二维度上生长时,你必须显式地增长所有向量

// grow twice in the first dimension
a.push_back( vector<int>() );
a.push_back( vector<int>() );

a[0].push_back( 5 ); // a[0].size() == 1, a[1].size()==0
//在第一个维度中增长两倍
a、 向后推(向量());
a、 向后推(向量());
a[0]。向后推(5);//a[0].size()==1,a[1].size()==0
如果这对你没问题(它不是一个真正的矩阵,而是一个向量向量),你应该没问题。否则你需要格外小心,以保持第二维度在所有向量上的稳定

如果你正在规划一个固定大小的矩阵,那么你应该考虑封装在一个类中并重写运算符(),而不是提供双数组语法。阅读关于这个

<代码> STD的C++常见问题解答::向量< STD::vector > a; //m*n是矩阵的大小 int m=2,n=4; //按m增长行数 a、 调整大小(m); 对于(int i=0;i
dribeas的建议确实是一条可行之路


只要给出一个你可能想进入运算符()路由的原因,考虑一下,例如,如果你的数据是稀疏的,你可以用不同的方法来节省内部空间和操作空间()。向最终用户隐藏该内部实现问题,从而为您提供更好的封装,并允许您稍后在不破坏界面的情况下对内部布局进行空间或速度改进更改。

如果您不必使用向量,您可以尝试。下面是一个简短的例子。

正如Ari所指出的,
vector
是正确的方法


除此之外,在这种情况下,我总是考虑在一个类中封装内向量(实际上,它代表什么),因为复杂的STL结构往往变得笨拙和混淆。

< P>只使用以下方法使用二维向量。

int行、列;
// . . .
向量>矩阵(行,向量(列,0));
或
向量>矩阵;
分配(行,向量(列,0));
//在这里做你的事。。。

这将创建一个大小为rows*columns的矩阵,并将其初始化为零,因为我们在构造函数中传递零(0)作为第二个参数,即vector(columns,0)。

矩阵声明,例如,具有5行和3列:

vector<vector<int> > new_matrix(5,vector<int>(3));

复制品?:我认为它不是完全复制品。这个问题是关于使用向量向量而不是原始内存的细节。FAQ Lite链接现在是如何定义行和列的?
int rows, columns;        

// . . .

vector < vector < int > > Matrix(rows, vector< int >(columns,0));

                                  Or

vector < vector < int > > Matrix;
Matrix.assign(rows, vector < int >(columns, 0));

// Do your stuff here...
vector<vector<int> > new_matrix(5,vector<int>(3));
vector<int> Row;    
vector<Row> My_matrix;
My_matrix new_matrix(5,Row(3));