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