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

use*_*141 5 c++ std deque c++11

我能编码std::max_element(std::begin(my_deque), std::end(my_deque))吗?

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

非常感谢你!

Nat*_*ica 7

std::max_element 有一个签名的形式

template<class ForwardIterator>
ForwardIterator max_element(ForwardIterator first, ForwardIterator last);
Run Code Online (Sandbox Code Playgroud)

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

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

因此,因为它使用前向迭代器或更好,它总是可以的.


Cor*_*mer 6

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

template< class ForwardIt > 
ForwardIt max_element(ForwardIt first, ForwardIt last);
Run Code Online (Sandbox Code Playgroud)

对迭代器的唯一要求是

first,last - 转发定义要检查的范围的迭代器

因此不需要随机访问迭代器,只需要转发迭代器.