多维向量
海C ++
如何在2D数组中创build2Dvector
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;
在向量中如何做同样的事情? 先谢谢你。
vector<vector<int> > a;
std::vector< std::vector< int > > a; // as Ari pointed
用于增长的matrix可能变得复杂,因为系统不能保证所有的内部vector具有相同的大小。 每当你在第二个维度上成长,你将不得不明确地增长所有的向量。
// 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
如果这对你来说很好(它不是一个真正的matrix,而是一个vectorvector),你应该没问题。 否则,您需要特别小心,以保持所有向量的二维稳定性。
如果你打算在一个固定大小的matrix上,那么你应该考虑封装在一个类中,并重载operator()而不是提供双数组语法。 在这里阅读C ++ FAQ
std::vector< std::vector<int> > a; //m * n is the size of the matrix int m = 2, n = 4; //Grow rows by m a.resize(m); for(int i = 0 ; i < m ; ++i) { //Grow Columns by n a[i].resize(n); } //Now you have matrix m*n with default values //you can use the Matrix, now a[1][0]=98; a[1][1]=989; a[1][2]=981; a[1][3]=987; //OR for(i = 0 ; i < m ; ++i) { for(int j = 0 ; j < n ; ++j) { //modify matrix int x = a[i][j]; } }
如果你不需要使用vector,你可能想尝试Boost.Multi_array 。 这是一个简短例子的链接 。
dribeas的build议是真正的路要走。
只是为了说明为什么您可能想要使用operator()路由,请考虑一下,例如,如果数据稀疏,则可以以不同的方式布局以节省内部空间,而operator()隐藏最终用户给出的内部实现问题你更好的封装,并允许你在不破坏你的界面的情况下,让内部布局的变化得到改善。
正如Ari指出的,vector <vector <int >>是正确的方法。
除此之外,在这种情况下,我总是考虑在一个类中包装内部向量(实际上,无论它代表什么),因为复杂的STL结构往往变得笨拙和混乱。
只要使用下面的方法来使用二维vector。
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...
这将创build一个matrix的大小行*列,并初始化为零,因为我们在构造函数中传递一个零(0)作为第二个参数,即向量<int>(columns,0)。