1

我希望了解以下迭代器类的示例。做什么input_iterator_tagmit.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;
}
4

1 回答 1

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++ 中的指针:保存数组的变量的行为本质上与指向数组中第一个元素的指针相同。因此,传递数组参数而不是指针参数是合法的。

于 2013-03-10T05:17:13.347 回答