如何用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; }