c++查找容器中的最大值最小值的迭代器和索引——max_element与distance


今天在做leetcode每日一题时需要找到vector容器中的最大值,因此顺便整理一下最大值和最小值迭代器和索引的查找方法。

迭代器的查找方法

max_element和min_element函数

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

该函数返回查找范围内的最大值的迭代器,查找区间前闭后开。
自定义比较函数的函数原型为:

template <class ForwardIterator, class Compare>
  ForwardIterator max_element (ForwardIterator first, ForwardIterator last,
                               Compare comp);

查找范围内最小元素函数为min_element。
示例:

#include <iostream>     // std::cout
#include <algorithm>    // std::min_element, std::max_element

bool myfn(int i, int j) { return i<j; }

struct myclass {
  bool operator() (int i,int j) { return i<j; }
} myobj;

int main () {
  int myints[] = {3,7,2,5,6,4,9};

  // using default comparison:
  std::cout << "The smallest element is " << *std::min_element(myints,myints+7) << '\n';
  std::cout << "The largest element is "  << *std::max_element(myints,myints+7) << '\n';

  // using function myfn as comp:
  std::cout << "The smallest element is " << *std::min_element(myints,myints+7,myfn) << '\n';
  std::cout << "The largest element is "  << *std::max_element(myints,myints+7,myfn) << '\n';

  // using object myobj as comp:
  std::cout << "The smallest element is " << *std::min_element(myints,myints+7,myobj) << '\n';
  std::cout << "The largest element is "  << *std::max_element(myints,myints+7,myobj) << '\n';

  return 0;
}
The smallest element is 2
The largest element is 9
The smallest element is 2
The largest element is 9
The smallest element is 2
The largest element is 9

索引的查找方法

max_element与min_element函数

上面已经介绍了max_element与min_element函数的作用,我们可以通过先找到最值迭代器,然后再减去begin()即可得到最值的索引:

int indexOfMax=max_element(vec.begin(),vec.begin()+n)-vec.begin();

distance函数

该函数计算迭代器之间元素的个数
函数原型为:

template<class InputIterator>
  typename iterator_traits<InputIterator>::difference_type
    distance (InputIterator first, InputIterator last);
#include <iostream>     // std::cout
#include <iterator>     // std::distance
#include <list>         // std::list

int main () {
  std::list<int> mylist;
  for (int i=0; i<10; i++) mylist.push_back (i*10);

  std::list<int>::iterator first = mylist.begin();
  std::list<int>::iterator last = mylist.end();

  std::cout << "The distance is: " << std::distance(first,last) << '\n';

  return 0;
}

我们可以这样来找到索引:

auto maxIter=max_element(vec.begin(),vec.begin()+n);
int indexOfMax=distance(vec.begin(),maxIter);
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值