【发布时间】:2016-11-09 05:01:01
【问题描述】:
vector 的函数 max_element 似乎可以用于此目的,但我不知道如何使用它。
ForwardIterator max_element (ForwardIterator first, ForwardIterator last);
ForwardIterator 的类型是什么?如何指定它从第 m 个元素开始搜索?以及如何找到最大元素的索引?谢谢。
【问题讨论】:
vector 的函数 max_element 似乎可以用于此目的,但我不知道如何使用它。
ForwardIterator max_element (ForwardIterator first, ForwardIterator last);
ForwardIterator 的类型是什么?如何指定它从第 m 个元素开始搜索?以及如何找到最大元素的索引?谢谢。
【问题讨论】:
使用以下内容:
std::max_element(vec.begin() + m, vec.begin() + n);
假设m < n 和n <= vec.size(),其中vec 是std::vector 对象。
这将返回一个迭代器到指定范围内的最大值元素,以获取相应的索引使用it - vec.begin(),其中it是最大元素迭代器。
【讨论】:
std::max_element 将迭代器返回到范围内的最大元素。
it - vec.begin() 获取索引,其中it 是最大元素迭代器
std::vector 是 0-indexed。 m 和 n 需要是基于 0 的值。
std::distance(vec.begin(), it);
这个签名告诉你std::max_element 是一个模板,只要它满足前向迭代器的要求,它就可以接受任何类型的参数,并且它返回相同的类型。您只需传入迭代器,它会将迭代器返回到范围内找到的最大元素。您可以取消引用以获取值本身。因此
const auto max_iterator = std::max_element(v.begin() + m, v.begin() + n);
const auto max_value = *i;
必须注意避免m 大于或等于n 的情况。
【讨论】: