【发布时间】:2020-03-08 15:00:50
【问题描述】:
我创建了一个自定义向量,我想为其创建一个迭代器,我已将代码简化为一个极简版本,只剩下一个错误。我想修复这个错误,然后让代码做它应该做的事情,即打印数组元素的总和。
代码如下:
#include <iostream>
using namespace std;
template <class Elem>
class ArrayVector{
public :
ArrayVector(){
A = new Elem[3];
A[0] = 1;
A[1] = 2;
A[3] = 3;
ptr = &A[0];
}
const ArrayVector * begin(){
this->begin();
}
class iteratorArray{
Elem * current;
const ArrayVector * begin(){
return iteratorArray();
}
const ArrayVector* end(){
iteratorArray* end = new iteratorArray(¤t[3]);
return end;
}
iteratorArray(Elem* initLoc){
current = initLoc;
}
iteratorArray operator+(int n){
current = ¤t[n];
return *this;
}
bool operator!=(iteratorArray& obj2){
return this->current != obj2.current;
}
iteratorArray operator++(){
current = current+1;
return *this;
}
Elem& operator*(){
return *current;
}
};
Elem* A;
Elem* ptr;
};
int main() {
ArrayVector<int> vector1;
typedef ArrayVector<int>::iteratorArray iteratorArray;
int sum = 0;
for (iteratorArray p = vector1.begin(); p != vector1.end(); ++p)
sum += *p;
return sum;
}
【问题讨论】:
-
您的
ArrayVector没有任何begin和end函数 - 您将它们定义为iteratorArray的成员 -
由于您是新来的,请拨打tour并阅读How to Ask。对于像您这样的问题,还需要提取并提供minimal reproducible example。另外,你犯了一个错误,你咬得太多而无法咀嚼。取而代之的是更小的增量步骤,例如放弃整个
template ...的东西。此外,为了跟踪您的进度,请考虑“测试驱动开发”(在网上搜索!),它是许多编程任务的宝贵技术。 -
为什么
delete [] A;在你的ArrayVector复制构造函数中?对象是全新的,delete有什么用? -
您的
begin函数缺少return,甚至没有声明返回迭代器,而是指向ArrayVector的指针 -
我的大学作业需要使用迭代器
标签: c++ arrays vector iterator