这是一个现在得到的代码但由于不完整的变量类型container :: iterator错误而无法编译。这个类和迭代器仍然非常简单,因为我试图弄清楚如何组织我的代码。
template <typename T> class container {
using size_type = std::size_t;
using pointer = T*;
using const_pointer = const T*;
public:
class iterator;
container (size_type n=0): data {n>0 ? new T[n]:nullptr}, size {n>0 ? n:0}{};
container (iterator begin, iterator end){};
~container (){ delete[] data; };
private:
pointer data;
size_type size;
};
template <typename T> class container<T>::iterator {
public:
iterator (pointer p): current {p} {};
iterator& operator++ (){ current++; return *this; };
iterator& operator-- (){ current--; return *this; };
reference operator* (){ return *current; };
bool operator== (const iterator& b) const { return current == b.current; };
bool operator!= (const iterator& b) const { return current != b.current; };
private:
pointer current;
};
如果可能的话,我想将迭代器定义保留在容器类之外。谢谢你的回复。
答案 0 :(得分:2)
如果可能的话,我想将迭代器定义保留在容器类之外。
事实并非如此,因为container
的成员函数的参数在没有其类型定义的情况下无法正确分析。
将其内联移动。
答案 1 :(得分:2)
container (iterator begin, iterator end){};
使用iterator
但在代码中的那一点上没有iterator
的定义,只有声明。在甚至可以声明这个构造函数之前,您需要定义迭代器的结构。
您可以更改此构造函数以获取引用。然后你可以在你的类中声明它,然后在iterator的定义下面定义它。 IMO这不是最好的方式,但它是可能的。