为什么std::reverse(c.begin(), c.end())
要求底层容器c
提供双向迭代器?
事实上,这意味着(多 - )map
,(多 - )set
,但那些当然不能逆转,因为它们是有序的。唯一的其他 bi-dir 容器是list
,但该容器有自己的成员函数.reverse()
。
这意味着可以在std::reverse
,array
和vector
上应用deque
随机访问。
那么,为什么不“诚实”并说:需要随机访问,还是使用成员函数?
答案 0 :(得分:3)
您甚至不需要使用用户定义的迭代器,您可以在自己的问题中提供答案。
唯一的其他 bi-dir 容器是
list
,但该容器有自己的成员函数.reverse()
。
但是,该成员函数会反转整个列表。通过传递除std::reverse
和list.begin()
之外的其他迭代器,list.end()
只允许反转列表的一部分。
答案 1 :(得分:2)
对于使用bidireactional迭代器的用户定义的迭代器或投币器,这样做会受到不必要的限制。由于不需要随机访问,因此不需要它。