在硬件级别使用 ForwardIterator 与 BidirectionalIterator 相比有何作用?
What does using a ForwardIterator, as opposed to a BidirectionalIterator, do at the hardware level?
假设我有一个容器,我需要逐一移动它的元素。如果我知道我只需要在迭代器上使用 ++
运算符,我应该使用 ForwardIterator
,但是如果我改用 BidirectionalIterator
,在性能方面会有什么损失?我不明白如何告诉编译器您将迭代器的方向限制在某个范围内可以帮助它使您的程序更好。
迭代器的类型描述了您可以对其使用的操作。迭代器本身只是一个概念,用于描述用于与标准容器交互的类型指针。
前向迭代器只能递增。双向迭代器支持前向迭代器所做的一切,并且可以递减。随机访问迭代器支持双向迭代器所做的一切,它可以像指针一样支持算术运算。有一个漂亮的小图表 here 向您展示了不同 "types" 支持的所有内容。
了解这些类型支持的内容后,您就可以将这些类型用作模板参数,向最终用户表达您的函数需要哪种类型的迭代器。如果一个函数调用一个随机访问迭代器,你不应该给它一个前向迭代器,因为它们很可能在迭代器上做前向迭代器不能做的操作。相反,如果你有一个需要前向迭代器的函数,并且你传递给它一个随机访问迭代器,那么你很好,因为随机访问迭代器支持所有前向迭代器操作。
假设我有一个容器,我需要逐一移动它的元素。如果我知道我只需要在迭代器上使用 ++
运算符,我应该使用 ForwardIterator
,但是如果我改用 BidirectionalIterator
,在性能方面会有什么损失?我不明白如何告诉编译器您将迭代器的方向限制在某个范围内可以帮助它使您的程序更好。
迭代器的类型描述了您可以对其使用的操作。迭代器本身只是一个概念,用于描述用于与标准容器交互的类型指针。
前向迭代器只能递增。双向迭代器支持前向迭代器所做的一切,并且可以递减。随机访问迭代器支持双向迭代器所做的一切,它可以像指针一样支持算术运算。有一个漂亮的小图表 here 向您展示了不同 "types" 支持的所有内容。
了解这些类型支持的内容后,您就可以将这些类型用作模板参数,向最终用户表达您的函数需要哪种类型的迭代器。如果一个函数调用一个随机访问迭代器,你不应该给它一个前向迭代器,因为它们很可能在迭代器上做前向迭代器不能做的操作。相反,如果你有一个需要前向迭代器的函数,并且你传递给它一个随机访问迭代器,那么你很好,因为随机访问迭代器支持所有前向迭代器操作。