我希望了解迭代器类的以下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;
}
答案 0 :(得分:4)
按照您提出的顺序,您的问题的答案是:
1)此处解释input_iterator_tag
:http://en.cppreference.com/w/cpp/iterator/iterator_tags
因此,myiterator
扩展iterator
并指定(在编译时)它是输入迭代器。它还指定它迭代的类型是int
。 (警告:这是我最不确定的答案,因为我对模板和迭代器没有太多经验。)
2)是的,mit.p
是指针,但p
也是如此,因此p
(指针)被初始化为mit.p
的副本(也是指针)。因此,它们都指向相同的内存位置。
3)*this
是迭代器本身。也就是说,this
是指向实际迭代器对象使用this
调用方法的指针,因此*this
是该对象的实际值:迭代器本身。
4)数组可以被视为C ++中的指针:包含数组的变量的行为与指向数组中第一个元素的指针基本相同。因此,传递数组参数而不是指针参数是合法的。