reverse_iterator的base()函数

时间:2017-12-01 00:46:29

标签: c++ c++11 iterator

从这个老问题

C++ custom collection reverse_iterator with similar behaviour to std::vector implementation

我认为线条(在修改他的设计之后)

template <typename Iterator>
class reverse_iterator {
    Iterator _it;
public:
    reverse_iterator(const Iterator& it):_it(it) { }
    Iterator base() const {Iterator it = _it; return --it;}
    typename Iterator::value_type& operator*() const {return *base();}
//  ...
};

是正确的(没有人回答他们是不正确的)。但它没有给出std::reverse_iterator的这个测试给出的相同输出:

#include <iostream>  
#include <iterator>    
#include <vector>  

int main () {
    std::vector<int> myvector = {1,2,3};
    std::vector<int>::iterator it = std::next(myvector.begin());
    std::reverse_iterator<std::vector<int>::iterator> r(it);
    std::cout << *it << '\n';  // 2
    std::cout << *r << '\n';  // 1
    std::cout << *r.base() << '\n';  // 2
}

似乎表明这些行应该是

template <typename Iterator>
class reverse_iterator {
    Iterator _it;
public:
    reverse_iterator(const Iterator& it):_it(it) { }
    Iterator base() const { return _it; }
    typename Iterator::value_type& operator*() const { return *--base(); }
//  ...
};

确实会提供与std::reverse_iterator相同的输出。这里有什么用?

0 个答案:

没有答案