- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
假设我有一个容器,我需要逐一移动它的元素。如果我知道我只需要在迭代器上使用 ++
运算符,我应该使用 ForwardIterator
,但是如果我使用 在性能方面会有什么损失code>BidirectionalIterator
代替?我不明白如何告诉编译器您将迭代器的方向限制在某个范围内可以帮助它使您的程序更好。
最佳答案
迭代器的类型描述了您可以对其使用的操作。迭代器本身只是一个概念,用于描述用于与标准容器交互的类型指针。
前向迭代器只能递增。双向迭代器支持前向迭代器所做的一切,并且可以递减。随机访问迭代器支持双向迭代器所做的一切,它可以像指针一样支持算术运算。有一张漂亮的小图表 here这向您展示了不同“类型”支持的一切。
了解这些类型支持的内容后,您就可以将这些类型用作模板参数,向最终用户表达您的函数需要哪种类型的迭代器。如果一个函数调用一个随机访问迭代器,你不应该给它一个前向迭代器,因为它们很可能在迭代器上做前向迭代器不能做的操作。相反,如果您有一个需要前向迭代器的函数,并且您向它传递了一个随机访问迭代器,那么您就没问题,因为随机访问迭代器支持所有前向迭代器操作。
关于c++ - 在硬件级别使用 ForwardIterator 与 BidirectionalIterator 相比有何作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30190036/
decltype(*it) 是迭代器的值类型,还是指向它的左值引用,还是其他? 我认为它是一个左值引用,因为*it 是一个左值,但我不确定。 注意:在我的例子中,它 是一个BidirectionalI
假设我有一个容器,我需要逐一移动它的元素。如果我知道我只需要在迭代器上使用 ++ 运算符,我应该使用 ForwardIterator,但是如果我使用 在性能方面会有什么损失code>Bidirecti
我是一名优秀的程序员,十分优秀!