C++;:使用迭代器构造二维动态分配数组 我是C++的新手,我尝试用一个构造函数创建一个类,它动态分配一个2D数组。我尝试将for循环与迭代器一起使用(比如:for(auto-itr=arr.begin();itr!=arr.end();itr++),但发现无法将.begin()与指针一起使用

C++;:使用迭代器构造二维动态分配数组 我是C++的新手,我尝试用一个构造函数创建一个类,它动态分配一个2D数组。我尝试将for循环与迭代器一起使用(比如:for(auto-itr=arr.begin();itr!=arr.end();itr++),但发现无法将.begin()与指针一起使用,c++,arrays,dynamic-memory-allocation,C++,Arrays,Dynamic Memory Allocation,以下是我的代码: 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]; } } //Myarr

以下是我的代码:

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) 是否有任何方法可以使用迭代器动态分配数组

谢谢你的回答

我试图创建一个具有构造函数的类,该构造函数动态分配2D数组

关于动态2D数组,只有其最外层的维度可以是动态的。似乎需要两个动态标注。对于C++中的二维数组来说,这是不可能的。 看起来您并不是在创建一个2D数组,而是一个指针数组,其中每个指针指向一个整数数组,所以上面提到的限制不是问题

我不知道为什么(*ptr).end()和ptr->begin()都不起作用

是成员访问操作员<代码>ptr指向指针。指针没有成员

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

(1) 我说的对吗

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

(2) 是否有任何方法可以使用迭代器动态分配数组

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

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

您还需要结束迭代器。你可以通过指针运算得到。只需将数组的长度添加到开始到结束:
ptr+行


注意,不要使用拥有裸指针。使用RAII容器,例如
std::vector
来创建动态数组。

ptr
是一个原始指针,它不是类实例,因此,它没有任何成员函数,例如
begin
end
。您可以从
ptr
迭代到
ptr+行
(独占)。实际上,指针是(随机访问)迭代器。