簡體   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