我可以在 c++11 中的 std::d eque 上使用 std::max_element() 吗?

Can I use std::max_element() on std::deque in c++11?

本文关键字:std element max c++11 中的 我可以 eque      更新时间:2023-10-16

我可以像std::max_element(std::begin(my_deque), std::end(my_deque))一样编码吗?

我问是因为我知道deque不能保证连续存储,所以我想知道在使用涉及迭代器的函数(如std::max_element(时它是否会正确运行?

谢谢!

std::max_element的签名形式为

template<class ForwardIterator>
ForwardIterator max_element(ForwardIterator first, ForwardIterator last);

从模板类型名称中我们知道它需要一个前向迭代器。 根据 [container.requirements.general]-表 96,我们知道std::deque使用

满足前向迭代器要求的任何迭代器类别

因此,由于它使用前向迭代器或更好的迭代器,因此它总是可以的。

是的,它会正常工作。在这种情况下将调用的std::max_element重载为

template< class ForwardIt > 
ForwardIt max_element(ForwardIt first, ForwardIt last);

对迭代器的唯一要求是

firstlast - 定义要检查的范围的前向迭代器

所以对随机访问迭代器没有要求,只需要前向迭代器。