| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2715 人关注过本帖, 1 人收藏
标题:如何用vector创建一个二维数组
只看楼主 加入收藏
busboy
Rank: 1
等 级:新手上路
帖 子:10
专家分:1
注 册:2016-12-20
结帖率:0
收藏(1)
已结贴  问题点数:20 回复次数:3 
如何用vector创建一个二维数组
题目是
编写一个矩阵的转置的函数,矩阵的行数和列数在程序中由用户输入。

设计到数组的定义元素个数是变量,所有就想到用vector ,但是转置有需要二维以上的数组,这里vector创建二维数组貌似我买的书上没有讲到。
搜索更多相关主题的帖子: 如何 用户 元素 
2017-05-16 22:37
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:20 
没有任何手段可以动态生成C/C++的“二维数组”,因为维度是编译期间的语法糖
估计你想要的是 vector<vector<TYPE>>,但你考虑两点
a,这种考试题目一般而言应该规定好了行数和列数的上限,如果不大的话,你可以定义一个最大的二维数组但只用一部分
b,你可以封装vector成二维数组,即将二维映射到一维对应的位置上
2017-05-16 23:59
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:0 
一个二维数组演示

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

2017-05-17 08:44
busboy
Rank: 1
等 级:新手上路
帖 子:10
专家分:1
注 册:2016-12-20
收藏
得分:0 
回复 2楼 rjsp
我想过你说的b方案,我看只有这个还不错。。你下面给我的代码我好多东西都看不懂,我才初学呢。。
2017-05-17 10:27
快速回复:如何用vector创建一个二维数组
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.038878 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved