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

时间:2017-05-17 19:40:18

标签: c++ c++11 std deque

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

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

非常感谢!

2 个答案:

答案 0 :(得分:7)

std::max_element有一个

形式的签名
template<class ForwardIterator>
ForwardIterator max_element(ForwardIterator first, ForwardIterator last);

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

  

符合前向迭代器要求的任何迭代器类别

因为它使用了前向迭代器或更好,所以它总是没问题。

答案 1 :(得分:6)

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

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

对迭代器的唯一要求是

  

firstlast - 转发定义要检查的范围的迭代器

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