设为首页 加入收藏

TOP

9.1 C++ STL 排序、算数与集合(三)
2023-08-26 21:10:35 】 浏览:217
Tags:9.1 STL 排序
5 + middle, iArray5 + len, greater<int>()); for_each(iArray5, iArray5 + len, MyPrint); system("pause"); return 0; }

9.6 容器区间查找算法

Bound 算法函数,用于查找序列中指定值的边界位置。bound的用法如下:

template<class ForwardIterator, class T>
ForwardIterator lower_bound (ForwardIterator first, ForwardIterator last, const T& value);

template<class ForwardIterator, class T>
ForwardIterator upper_bound (ForwardIterator first, ForwardIterator last, const T& value);

其中,first、last是迭代器,表示待查找的序列的范围;value是需要查找的元素的值。lower_bound函数返回指向序列中第一个不小于value的元素的迭代器,如果所有元素都小于value,则返回last;upper_bound函数返回指向序列中第一个大于value的元素的迭代器,如果所有元素都不大于value,则返回last。

读者需要注意,该函数函数执行前,需要保证所输入的序列本身已经是已排序的序列,并且元素类型支持<运算符。

bound函数使用的是二分查找算法,可以高效地找到指定值的边界位置。lower_bound函数首先将序列分成若干个小的区间,每个区间内的元素都不大于value;然后在这些区间中继续执行二分查找操作,直到定位到第一个不小于value的元素位置。upper_bound函数和lower_bound函数类似,只是在找到不小于value的元素时,继续向前遍历,直到定位到第一个大于value的元素位置。

#include <iostream>
#include <algorithm>

using namespace std;

int main(int argc, char* argv[])
{
  int iArray[] = { 3, 6, 9, 12, 13, 18, 20, 27, 55, 44};
  const int len = sizeof(iArray) / sizeof(int);

  // lower_bound 找出不小于某值的有序数组下确界元素
  int *result1 = lower_bound(iArray, iArray + len, 16);
  cout << "lower_bound = " << *result1 << endl;

  // upper_bound 找出大于某值的有序数组上确界元素
  int *result2 = upper_bound(iArray, iArray + len, 20);
  cout << "upper_bound = " << *result2 << endl;

  // equal_range 找出可插入某值的区间元素
  pair<int*, int*> range = equal_range(iArray, iArray + len, 5);
  cout << "lower_bound = " << *range.first << endl;
  cout << "upper_bound = " << *range.second << endl;
  
  system("pause");
  return 0;
}

9.7 最大值/最小值算法

min_element和max_element 算法函数,用于查找序列中的最小元素和最大元素。它们的用法如下:

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

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

其中,firstlast是迭代器,表示待查找的序列的范围。min_element函数返回指向序列中最小元素的迭代器,max_element函数返回指向序列中最大元素的迭代器。

读者需要注意,min_elementmax_element函数执行前,需要保证所输入的序列本身已经是已排序的序列。另外,为了实现更高效的运行时间,C++ STL中提供了另一个函数模板来查找最大或最小值。它可以在部分或未排序的序列中查找最大或最小的元素:

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

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

其中,comp是一个可调用函数或函数对象,用于指定元素的比较方法。min_elementmax_element函数的功能与之前相同,只是增加了一个参数comp,用于指定元素的比较方法。

总之,min_elementmax_element函数是C++ STL中非常实用的查找函数,可以方便地查找序列中的最小元素和最大元素,并支持自定义的比较方法,实现各种元素查找和排序等操作。

#include <iostream>
#include <algorithm>
#include <list>

using namespace std;

int main(int argc, char* argv[])
{
  list<int> ls = { 1, 4, 5, 6, 7, 2, 3, 4, 9, 7, 6 };

  // 返回链表最小元素
  cout << *min_element(ls.begin(), ls.end()) << endl;

  // 返回链表最大元素
  cout << *max_element(ls.begin(), ls.end()) << endl;

  // 剩余 max /min 比较
  cout << max(100, 30) << endl;
  cout << min(1, -10) << endl;

  system("pause");
  return 0;
}

9.8 交

首页 上一页 1 2 3 4 5 下一页 尾页 3/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C++项目实战之演讲比赛流程管理系.. 下一篇使用C++界面框架ImGUI开发一个简..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目