繁体   English   中英

C++:使用迭代器构造二维动态分配数组

[英]C++: using iterator to construct a 2D dynamically allocated array

我是 C++ 的新手,我正在尝试使用动态分配二维数组的构造函数创建 class。 我尝试将 for 循环与迭代器一起使用(例如:for(auto itr = arr.begin(); itr. = arr;end().itr++))并发现我不能将.begin() 与指针一起使用。

以下是我的代码:

class Myarray {
public:
    Myarray(std::size_t a, std::size_t b) : row(a), col(b) {
        ptr = new int* [row];
        for (auto itr = ptr->begin(); itr != (*ptr).end(); itr++) {
        itr = new int[col];
        }
    }
    //Myarray(Myarray& arr) {}; copy constructor, not filled yet
    //~Myarray() {}; destructor, not filled yet

private:
    std::size_t row, col;
    int** ptr;

};

我不确定为什么 (*ptr).end() 和 ptr->begin() 都不起作用。 我的猜测是: ptr 应该指向数组的第一个条目,所以我不能使用 .end() 和 begin() 。

(1)我对此是否正确? (2) 有什么方法可以用迭代器动态分配 arrays 吗?

感谢您的回答!

我正在尝试使用动态分配二维数组的构造函数创建 class

关于动态 2D arrays 的事情是只有它们的最外层维度可以是动态的。 看来您需要两个动态维度。 这对于 C++ 中的二维数组是不可能的。

看起来你不是在创建一个二维数组,而是一个指针数组,其中每个指针都指向一个整数数组,所以上面提到的限制不是问题。

我不确定为什么 (*ptr).end() 和 ptr->begin() 都不起作用。

. 是成员访问运算符。 ptr指向一个指针。 指针没有成员。

我的猜测是: ptr 应该指向数组的第一个条目,所以我不能使用 .end() 和 begin() 。

(1)我对此是否正确?

ptr指向的指针是动态指针数组的第一个元素。

(2) 有什么方法可以用迭代器动态分配 arrays 吗?

我不太明白这句话,但那可能是因为你还不太清楚这些词的意思。

指针是 arrays 的迭代器。 因此,假设ptr是指向数组第一个元素的指针,并且您希望迭代器指向第一个元素,那么ptr就是您想要的迭代器。

您还需要结束迭代器。 你可以用指针算术得到它。 只需将数组的长度添加到开头即可到达结尾: ptr + row


PS 不要使用拥有裸指针。 使用 RAII 容器(例如std::vector )创建动态数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM