HC4*_*ica 12 c++ iterator stl max stl-algorithm
C++标准库的max_element
算法需要将迭代器作为模型的输入传递ForwardIterator
.
我的理解是通过指定您可以使用a 多次迭代相同的范围来ForwardIterator
提炼.因此,多遍算法需要s.InputIterator
ForwardIterator
ForwardIterator
但是,max_element
不是多遍算法 - 只需迭代一次范围就可以确定其最大元素.那么为什么max_element
需要额外的功能ForwardIterator
呢?
R. *_*des 18
std::max_element
将迭代器返回到最大元素.如果提供单个传递范围,则该迭代器将不再有效,因为算法必须对该范围执行完整传递.
在单个传递范围内,您无法将可用的迭代器保留为先前的值.这是由于++r
标准表107中给出的后置条件:
post:
r
不再要求任何前一个值的副本可以解除引用或属于==
.
基本上,单个通过范围是一个"消失"的范围,当你通过它时,std::max_element
需要一个范围,以便将迭代器返回到(可能)它的中间.
可以编写一个算法来计算返回实际最大值而不是迭代器的最大值,但这需要值可复制以便按值返回.Movable是不够的,因为移动会阻止使用const迭代器.并且通过引用返回也不是一种选择,因为这意味着范围实际上被困住了.
归档时间: |
|
查看次数: |
453 次 |
最近记录: |