假设我有一个容器,我需要逐个浏览它的元素。如果我知道我只需要在迭代器上使用++
运算符,我应该使用ForwardIterator
,但如果我使用BidirectionalIterator
,我会在性能方面失去什么?我不明白如何告诉编译器你在某个范围内限制迭代器的方向可以帮助它使你的程序更好。
答案 0 :(得分:0)
迭代器的类型描述了允许在其上使用的操作。迭代器本身只是一个描述用于与标准容器交互的类型指针的概念。
前向迭代器只能递增。双向迭代器支持前向迭代器所做的一切,并且可以递减。随机访问迭代器支持双向迭代器所做的一切,它可以支持像指针这样的算术运算。有一个漂亮的小图表here,可以显示不同的"类型"支持。
了解这些类型支持的内容允许您使用这些类型作为模板参数来向最终用户表达您需要什么类型的迭代器。如果一个函数需要一个随机访问迭代器,你就不应该给它一个前向迭代器,因为很可能它们正在对前向迭代器不能执行的迭代器上进行操作。相反,如果你有一个需要前向迭代器的函数,并且你传递了一个随机访问迭代器,那么你很好,因为随机访问迭代器支持所有前向迭代器操作。