gpt4 book ai didi

c++ - 为什么 std::max_element 需要 ForwardIterator?

转载 作者:IT老高 更新时间:2023-10-28 23:14:44 35 4
gpt4 key购买 nike

C++ 标准库的 max_element 算法要求将迭代器作为输入传递给模型 ForwardIterator

我的理解是 ForwardIterator 通过指定您可以使用 ForwardIterator 在同一范围内多次迭代来优化 InputIterator。因此,多遍算法需要ForwardIterators。

但是,max_element 不是多遍算法 - 在一个范围内迭代一次以确定其最大元素就足够了。那么为什么max_element需要ForwardIterator的额外能力呢?

最佳答案

std::max_element 返回一个指向最大元素的迭代器。如果您提供单次通过范围,则该迭代器将不再有效,因为算法必须对该范围执行全通。

在单个传递范围内,您不能将可用的迭代器保留为先前的值。这是由于标准中表 107 中给出的 ++r 的后置条件:

post: any copies of the previous value of r are no longer required either to be dereferenceable or to be in the domain of ==.

基本上,单次通过范围是在您通过它时“消失”的范围,并且 std::max_element 需要一个持续存在的范围以便将迭代器返回到(可能)中间。

可以编写一个算法来计算返回实际最大值的最大值,而不是一个迭代器,但这需要这些值是可复制的,以便按值返回。 Movable 是不够的,因为移动会阻止使用 const 迭代器。并且通过引用返回也不是一种选择,因为这意味着范围实际上会停留在附近。

关于c++ - 为什么 std::max_element 需要 ForwardIterator?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12452356/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com