我想了解迭代器類的以下example。 input_iterator_tag
是做什麼的?是否使用mit.p
作爲構造函數中使用的值,但不是mit.p
的指針?什麼是*this
?如果構造函數只允許整數和指針/值引用,是否允許myiterator beginning(numbers)
?如何構造一個迭代器類?
// iterator example
#include <iostream>
#include <iterator>
using namespace std;
class myiterator : public iterator<input_iterator_tag, int> // what is input_iterator_tag?
{
int* p;
public:
myiterator(int* x) :p(x) {}
myiterator(const myiterator& mit) : p(mit.p) {} // why isn't this p(*mit.p)?
myiterator& operator++() {++p;return *this;} // what is *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;}
int& operator*() {return *p;}
};
int main() {
int numbers[]={10,20,30,40,50};
myiterator beginning(numbers); // however, constructor is not overloaded with array
myiterator end(numbers+5);
for (myiterator it=beginning; it!=end; it++)
cout << *it << " ";
cout << endl;
return 0;
}