注册 登录
编程论坛 C++教室

如何用vector创建一个二维数组

busboy 发布于 2017-05-16 22:37, 2824 次点击
题目是
编写一个矩阵的转置的函数,矩阵的行数和列数在程序中由用户输入。

设计到数组的定义元素个数是变量,所有就想到用vector ,但是转置有需要二维以上的数组,这里vector创建二维数组貌似我买的书上没有讲到。
3 回复
#2
rjsp2017-05-16 23:59
没有任何手段可以动态生成C/C++的“二维数组”,因为维度是编译期间的语法糖
估计你想要的是 vector<vector<TYPE>>,但你考虑两点
a,这种考试题目一般而言应该规定好了行数和列数的上限,如果不大的话,你可以定义一个最大的二维数组但只用一部分
b,你可以封装vector成二维数组,即将二维映射到一维对应的位置上
#3
rjsp2017-05-17 08:44
一个二维数组演示

程序代码:
#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;
}

#4
busboy2017-05-17 10:27
回复 2楼 rjsp
我想过你说的b方案,我看只有这个还不错。。你下面给我的代码我好多东西都看不懂,我才初学呢。。
1