[英]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.