我是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;}
任何意见都表示赞赏,非常感谢您阅读我的问题。
答案 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);
}
所以即使行为相同但实现方式有点不同