我正在爲庫編寫一個迭代器類(例如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