34 了解哪些算法要求使用排序的区间作为参数

要求排序区间的STL算法:
  • binary_search:如果找到返回true,否则返回false
原型:
template <class ForwardIterator, class T>
bool binary_search ( ForwardIterator first, ForwardIterator last,
const T& value );
template <class ForwardIterator, class T, class Compare>
bool binary_search ( ForwardIterator first, ForwardIterator last,
const T& value, Compare comp );


  • lower_bound在first和last中的前闭后开区间进行二分查找,返回大于或等于val的第一个元素位置。如果所有元素都小于val,则返回last的位置
原型之一:
template <class ForwardIterator, class T>
ForwardIterator lower_bound ( ForwardIterator first, ForwardIterator last,
const T& value );
  • upper_bound:在first和last中的前闭后开区间进行二分查找,返回大于val的第一个元素位置。如果所有元素都小于val,则返回last的位置
原型之一:
template <class ForwardIterator, class T>
ForwardIterator upper_bound ( ForwardIterator first, ForwardIterator last,
const T& value );


  • equal_range:对于给定的范围[first,last), 返回所有值和val等价的元素的范围.
原型之一:
template <class ForwardIterator, class T>
pair<ForwardIterator,ForwardIterator>
equal_range ( ForwardIterator first, ForwardIterator last, const T& value );

  • set_union:求两个有序的区间的并集
原型之一:
template <class InputIterator1, class InputIterator2, class OutputIterator>
OutputIterator set_union ( InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
OutputIterator result );

  • set_intersection:求两个有序的区间的交集
原型:
template <class InputIterator1, class InputIterator2, class OutputIterator>
OutputIterator set_intersection ( InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
OutputIterator result );

  • set_difference:求两个有序的区间的差集
原型之一:
template <class InputIterator1, class InputIterator2, class OutputIterator>
OutputIterator set_difference ( InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
OutputIterator result );
  • set_symmetric_difference:求两个有序的区间的对称差集(两个集合的并集减去交集)
原型之一:
template <class InputIterator1, class InputIterator2, class OutputIterator>
OutputIterator
set_symmetric_difference ( InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
OutputIterator result );

  • merge:合并两个有序的区间(从两个的有序列(两个有序列可以在同一容器内)归并第三个容器.)
原型之一:
template <class InputIterator1, class InputIterator2, class OutputIterator>
OutputIterator merge ( InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
OutputIterator result );

  • inplace_rangge:合并两个有序的区间(一个容器内分两个有序的部分归并到本身的容器.)
原型之一:
template <class BidirectionalIterator>
void inplace_merge ( BidirectionalIterator first, BidirectionalIterator middle,
BidirectionalIterator last );
  • includes:测试排序范围是否包括另一个排序范围
原型之一:
template <class InputIterator1, class InputIterator2>
bool includes ( InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2 );


不一定要求排序的区间,但通常情况下会与排序区间一起使用:
  • unique:在范围内删除连续重复的副本(并非真正意义上的删除,和remove类似)
原型之一:
template <class ForwardIterator>
ForwardIterator unique ( ForwardIterator first, ForwardIterator last );
  • unique_copy:复制范围删除重复的
原型之一:
template <class InputIterator, class OutputIterator>
OutputIterator unique_copy ( InputIterator first, InputIterator last,
OutputIterator result );

unique和unique_copy使用相等来判断,而要求排序区间的算法均以等价性来判断。

猜你喜欢

转载自blog.csdn.net/weixin_28712713/article/details/80908877
34