我最近一直在使用向量,并且在比较正常的数组声明时发现它们非常方便。但是,我只处理了以下一维操作: -
vector<int>X;
X.push_back(value/variable);
如何对2D矢量等效执行类似操作并逐行动态更新值?如果问题很简陋,请在这里帮助我,并向我道歉。如果您可以向我显示一个链接,其中向量的所有操作都作为教程提供,那将非常有用。我试过很少的网站,但它们都是比特。请帮帮我。
答案 0 :(得分:3)
使用2D数组的另一种方法是在自己的类中使用一个带有2D寻址的向量。
这是一个例子:
#include <iostream>
#include <vector>
class array_2d
{
public:
array_2d(
unsigned int x,
unsigned int y )
:
m_size_x( x ),
m_size_y( y ),
// resize vector to size x*y, all elements are 0.
m_data( x*y, 0 )
{}
int
get( unsigned int x, unsigned int y ) const
{
return m_data[ x + y * m_size_y ];
}
void
set( unsigned int x, unsigned int y, int data )
{
m_data[ x + y * m_size_y ] = data;
}
private:
unsigned int m_size_x;
unsigned int m_size_y;
std::vector <int> m_data;
};
int main()
{
// 2D array 2x3.
array_2d m( 2, 3 );
// Set 2 cells into 1 and 3.
m.set( 1, 1, 1 );
m.set( 2, 0, 3 );
for( unsigned int i = 0; i < 3; ++i )
{
for( unsigned int j = 0; j < 2; ++j )
std::cout << m.get( i, j ) << " ";
std::cout << std::endl;
}
return 0;
}
答案 1 :(得分:1)
你需要vector <vector <int> >
的内容,内部向量代表一个完整的行。或者是一个完整的列(只需选择一行主要或一个主要列并坚持使用它)。
或者,只需使用boost :: multi_array(http://www.boost.org/doc/libs/1_53_0/libs/multi_array/doc/user.html)
以下是一个例子:
//#include <iostream>
#include <stdio.h>
#include <vector>
using namespace std;
int main(){
vector <vector <int> > my2d;
vector<int> row;
row.push_back(1); row.push_back(2); row.push_back(3);
my2d.push_back(row);
++row[1];
my2d.push_back(row);
--row[0];
my2d.push_back(row);
for(size_t r=0;r<my2d.size();r++)
{
for(size_t c=0;c<my2d[0].size();c++)
{
printf("%d ",my2d[r][c]);
}
printf("\n");
}
getchar();
return 0;
}