Back_insert_iterator返回类型

时间:2017-07-18 15:29:44

标签: c++ stl

我是C ++和STL的新手。我的问题是为什么back_insert_iterator的成员函数为operator *()和operator ++()返回* this?为什么迭代器需要两个成员函数?

这个想法是否来自以下代码片段? (II:InputIterator,OI:OutputIterator)。

template <typename II, typename OI>
OI my_copy (II b, II e, OI x) {
while (b != e) {
    *x = *b;
    ++b;
    ++x;}
return x;}

任何意见都表示赞赏,非常感谢您阅读我的问题。

1 个答案:

答案 0 :(得分:0)

back_insert_iterator& operator*();

只是一项任务操作

它返回迭代器本身,这使得可以使用*iter = value之类的代码将值输出(插入)到底层容器中。

下面的一个用作算术运算

back_insert_iterator& operator++();
back_insert_iterator& operator++( int );

它们使表达式*iter++=value and *++iter=value可用于将值输出(插入)到底层容器中。

宁昌在评论中提出的其他问题

int main()
{
    std::vector<int> v;
    std::back_insert_iterator<std::vector<int>> it(v);
    *it = 10; // it is equivalent to v.push_back(10);
     it = 99; // it is ALSO equivalent to v.push_back(99); 
    for (auto const & i : v) std::cout << i << " " ; //10 99
    return 0;
}

* it = 10

来电/使用

back_insert_iterator& operator*()
    {   // pretend to return designated value
    return (*this);
    } 

其中= 99;

来电和使用

back_insert_iterator& operator=(typename _Container::value_type&& _Val)
    {   // push value into container
    container->push_back(_STD move(_Val));
    return (*this);
    }

所以即使行为相同但实现方式有点不同