我正在为库编写一个迭代器类(例如MyIterator
)。创建常量迭代器和非常量迭代器
是否使用const的重载做出那样的std::vector
而MyIterator
行径const_iterator
像的std::vector
iterator
const MyIterator
行为是个好主意?
图书馆用户/开发人员会感到困惑吗?
的实施将是这样的:
// std::iterator example
#include <iostream> // std::cout
#include <iterator> // std::iterator, std::input_iterator_tag
class MyIterator : public std::iterator<std::input_iterator_tag, int>
{
mutable int* p;
public:
MyIterator(int* x) :p(x) {}
MyIterator(const MyIterator& mit) : p(mit.p) {}
MyIterator& operator++() {++p;return *this;}
MyIterator operator++(int) {MyIterator tmp(*this); operator++(); return tmp;}
bool operator==(const MyIterator& rhs) {return p==rhs.p;}
bool operator!=(const MyIterator& rhs) {return p!=rhs.p;}
const int& operator*() const {return *p;} // <-- const overload
int& operator*() {return *p;}
};
另一种方法是使用模板来实现,可以专门到const和non-const的迭代器一个迭代器类。我目前正在这样做(我听到助力是这样做的...)。但是,当我实现范围时,模板变得非常快速,然后范围的范围(如基于循环的嵌套范围)。
地狱是一个'mit'?可能回答你的问题。 – George
@George我把它当作迭代器被称为'mit'。可能是'my_iterator'的缩写。 – NathanOliver
我会感到困惑,但那只是我。 – jrok