【问题标题】:how to find the max element between the m-th and the n-th element of a vector in C++?如何在 C++ 中找到向量的第 m 个和第 n 个元素之间的最大元素?
【发布时间】:2016-11-09 05:01:01
【问题描述】:

vector 的函数 max_element 似乎可以用于此目的,但我不知道如何使用它。

ForwardIterator max_element (ForwardIterator first, ForwardIterator last);

ForwardIterator 的类型是什么?如何指定它从第 m 个元素开始搜索?以及如何找到最大元素的索引?谢谢。

【问题讨论】:

    标签: c++ vector


    【解决方案1】:

    使用以下内容:

    std::max_element(vec.begin() + m, vec.begin() + n);
    

    假设m < nn <= vec.size(),其中vecstd::vector 对象。

    这将返回一个迭代器到指定范围内的最大值元素,以获取相应的索引使用it - vec.begin(),其中it是最大元素迭代器。

    【讨论】:

    • 那我怎么知道哪个元素是最大元素呢?
    • std::max_element 将迭代器返回到范围内的最大元素。
    • 只需使用it - vec.begin() 获取索引,其中it 是最大元素迭代器
    • @Resorter: std::vector 是 0-indexed。 mn 需要是基于 0 的值。
    • @ArchbishopOfBanterbury 如果容器发生变化,更通用的获取位置的方法是std::distance(vec.begin(), it);
    【解决方案2】:

    这个签名告诉你std::max_element 是一个模板,只要它满足前向迭代器的要求,它就可以接受任何类型的参数,并且它返回相同的类型。您只需传入迭代器,它会将迭代器返回到范围内找到的最大元素。您可以取消引用以获取值本身。因此

    const auto max_iterator = std::max_element(v.begin() + m, v.begin() + n);
    const auto max_value = *i;
    

    必须注意避免m 大于或等于n 的情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-02
      • 2019-08-28
      • 2012-12-27
      • 2012-11-08
      • 1970-01-01
      • 2017-06-29
      • 2011-07-11
      相关资源
      最近更新 更多