如何用vector创建一个二维数组
题目是编写一个矩阵的转置的函数,矩阵的行数和列数在程序中由用户输入。
设计到数组的定义元素个数是变量,所有就想到用vector ,但是转置有需要二维以上的数组,这里vector创建二维数组貌似我买的书上没有讲到。
程序代码:#include <iostream>
#include <vector>
/*
只写了最常用的部分,移动构造、initializer_list、swap、begin、end,行代理类 等等省略掉了。
*/
template<typename T> class matrix
{
public:
matrix( size_t rowsize, size_t colsize ) : rowsize_(rowsize), colsize_(colsize), values_(rowsize*colsize)
{
}
size_t rowsize() const
{
return rowsize_;
}
size_t colsize() const
{
return colsize_;
}
const T& at( size_t row, size_t col ) const
{
return values_.at( row*colsize_ + col );
}
T& at( size_t row, size_t col )
{
return values_.at( row*colsize_ + col );
}
private:
size_t rowsize_, colsize_;
std::vector<T> values_;
};
template<typename T> std::istream& operator>>( std::istream& is, matrix<T>& mtx )
{
for( size_t r=0; r!=mtx.rowsize(); ++r )
{
for( size_t c=0; c!=mtx.colsize(); ++c )
{
if( !(is>>mtx.at(r,c)) )
return is;
}
}
return is;
}
template<typename T> std::ostream& operator<<( std::ostream& os, const matrix<T>& mtx )
{
for( size_t r=0; r!=mtx.rowsize(); ++r )
{
for( size_t c=0; c!=mtx.colsize(); ++c )
{
if( !(os<<mtx.at(r,c)<<(c+1!=mtx.colsize()?' ':'\n')) )
return os;
}
}
return os;
}
using namespace std;
int main( void )
{
matrix<int> mtx(2,3);
for( size_t r=0; r!=mtx.rowsize(); ++r )
{
for( size_t c=0; c!=mtx.colsize(); ++c )
{
mtx.at(r,c) = r*mtx.colsize()+c;
}
}
cout << mtx << endl;
}