为什么std :: reverse需要双向迭代器?

时间:2016-10-10 20:23:07

标签: c++ algorithm iterator reverse iterator-traits

为什么std::reverse(c.begin(), c.end())要求底层容器c提供双向迭代器

事实上,这意味着(多 - )map,(多 - )set,但那些当然不能逆转,因为它们是有序的。唯一的其他 bi-dir 容器是list,但该容器有自己的成员函数.reverse()

这意味着可以在std::reversearrayvector上应用deque 随机访问

那么,为什么不“诚实”并说:需要随机访问,还是使用成员函数?

2 个答案:

答案 0 :(得分:3)

您甚至不需要使用用户定义的迭代器,您可以在自己的问题中提供答案。

  

唯一的其他 bi-dir 容器是list,但该容器有自己的成员函数.reverse()

但是,该成员函数会反转整个列表。通过传递除std::reverselist.begin()之外的其他迭代器,list.end()只允许反转列表的一部分。

答案 1 :(得分:2)

对于使用bidireactional迭代器的用户定义的迭代器或投币器,这样做会受到不必要的限制。由于不需要随机访问,因此不需要它。