为了账号安全,请及时绑定邮箱和手机立即绑定

如何在c+中创建连续的2d数组?

如何在c+中创建连续的2d数组?

C++
紫衣仙女 2019-06-24 17:08:40
如何在c+中创建连续的2d数组?我想要创建一个函数,在C+中返回一个连续的2D数组。使用以下命令创建数组没有问题: int (*v)[cols] = new (int[rows][cols]);但是,我不知道如何将这个数组作为函数的一般类型返回。其职能是:  NOT_SURE_WHAT_TYPE create_array(int rows, int cols)   {         int (*v)[cols] = new (int[rows][cols]);         return v;   }我试过双倍和双倍,但两者都不起作用。我不想使用Double*,因为我想以2D数组的形式从外部访问这个数组。有关问题:如何使用New在C+中声明2d数组?
查看完整描述

3 回答

?
慕娘9325324

TA贡献1783条经验 获得超4个赞

除非在编译时知道两个维度的大小,否则您没有太多的选择:分配一个rows*cols数组intS,并使用整数乘法和加法滚动您自己的2D索引。将其封装在类中可以生成一个漂亮的语法,用于使用方括号运算符访问数组元素。因为您的数组是2D的,所以您需要使用代理(AKA“代理”)对象进行第一级数据访问。

下面是一个小示例代码,它使用std::vector<T>用于维护动态内存中的连续内存区域:

template<class T>class Array2D {
    vector<T> data;
    size_t cols;public:
    // This is the surrogate object for the second-level indexing
    template <class U>
    class Array2DIndexer {
        size_t offset;
        vector<U> &data;
    public:
        Array2DIndexer(size_t o, vector<U> &dt) : offset(o), data(dt) {}
        // Second-level indexing is done in this function
        T& operator[](size_t index) {
            return data[offset+index];
        }
    };
    Array2D(size_t r, size_t c) : data (r*c), cols(c) {}
    // First-level indexing is done in this function.
    Array2DIndexer<T> operator[](size_t index) {
        return Array2DIndexer<T>(index*cols, data);
    }};

你现在可以用Array2D<int>就好像它是内置的C+数组:

Array2D<int> a2d(10, 20);for (int r = 0 ; r != 10 ; r++) {
    for (int c = 0 ; c != 20 ; c++) {
        a2d[r][c] = r+2*c+1;
    }}

在IDONE上运行演示.


查看完整回答
反对 回复 2019-06-24
  • 3 回答
  • 0 关注
  • 560 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信