【发布时间】:2017-10-17 10:12:31
【问题描述】:
我可以像std::max_element(std::begin(my_deque), std::end(my_deque)) 这样编码吗?
我之所以问,是因为我知道 deque 不能保证连续存储,所以我想知道在使用像 std::max_element 这样的涉及迭代器的函数时它是否会正确运行?
非常感谢!
【问题讨论】:
-
他们的规范只需要
class ForwardIt,所以这应该适用于任何实现前向迭代的集合。它根本与连续存储无关。 -
std::max_elements只需要前向迭代器,请参阅:en.cppreference.com/w/cpp/algorithm/max_element -
max_element只要求迭代器是 ForwardIterator。它不需要随机访问/数据连续性 -
使用迭代器而不是指针的全部意义在于让这种东西工作。
-
迭代器实际上还有第二点:不编译不能工作的代码。
std::sort将无法编译,如果你传递 Forward Iterators。