2013-03-10 77 views
1

我想了解迭代器類的以下exampleinput_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; 
} 

回答

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++中的指針處理:一個包含數組的變量的行爲基本上與指向數組中第一個元素的指針相同。因此,傳遞數組參數而不是指針參數是合法的。