function template
<algorithm>

std::includes

template <class InputIterator1, class InputIterator2>  bool includes ( InputIterator1 first1, InputIterator1 last1,                  InputIterator2 first2, InputIterator2 last2 );template <class InputIterator1, class InputIterator2, class Compare>  bool includes ( InputIterator1 first1, InputIterator1 last1,                  InputIterator2 first2, InputIterator2 last2, Compare comp );
测试排序范围是否包含另一个排序范围
当排序范围 [first1,last1) 包含排序范围 [first2,last2) 中的所有元素时,返回 true。

元素使用 operator< 进行比较(第一个版本),或使用 comp 进行比较(第二个版本)。两个元素,ab 被认为是等价的,如果 (!(a<b) && !(b<a))(!comp(a,b) && !comp(b,a))

范围中的元素应已根据相同的标准(operator<comp)进行了排序。

此函数模板的行为等同于
1
2
3
4
5
6
7
8
9
10
11
template <class InputIterator1, class InputIterator2>
  bool includes (InputIterator1 first1, InputIterator1 last1,
                 InputIterator2 first2, InputIterator2 last2)
{
  while (first2!=last2) {
    if ( (first1==last1) || (*first2<*first1) ) return false;
    if (!(*first1<*first2)) ++first2;
    ++first1;
  }
  return true;
}

参数

first1, last1
输入迭代器指向第一个排序序列的起始和结束位置(用于测试其是否包含第二个序列)。使用的范围是 [first1,last1),它包含 first1last1 之间的所有元素,包括 first1 指向的元素,但不包括 last1 指向的元素。
first2, last2
输入迭代器指向第二个排序序列的起始和结束位置(用于测试其是否被第一个序列包含)。使用的范围是 [first2,last2)
comp
二元函数,接受两个元素作为参数(分别来自两个序列,顺序相同),并返回一个可转换为 bool 的值。返回值指示第一个参数中的元素是否被认为在它所定义的特定严格弱序中排在第二个参数之前。
该函数不得修改其任何参数。
这可以是指向函数的指针,也可以是函数对象。

返回值

如果范围 [first2,last2) 中的每个元素都包含在范围 [first1,last1) 中,则返回 true,否则返回 false
如果 [first2,last2) 是一个空范围,结果未定义。
如果 [first2,last2) 是一个空范围,则函数返回 true

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// includes algorithm example
#include <iostream>     // std::cout
#include <algorithm>    // std::includes, std::sort

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

int main () {
  int container[] = {5,10,15,20,25,30,35,40,45,50};
  int continent[] = {40,30,20,10};

  std::sort (container,container+10);
  std::sort (continent,continent+4);

  // using default comparison:
  if ( std::includes(container,container+10,continent,continent+4) )
    std::cout << "container includes continent!\n";

  // using myfunction as comp:
  if ( std::includes(container,container+10,continent,continent+4, myfunction) )
    std::cout << "container includes continent!\n";

  return 0;
}

输出
container includes continent!
container includes continent!


复杂度

最多为两个范围内距离的两倍:最多进行 2*(count1+count2)-1 次比较(其中 countXfirstXlastX 之间的距离)。

数据竞争

两个范围中的一些(或全部)对象被访问(最多各两次)。

异常

如果在任何元素比较(或 comp 调用)中抛出异常,或者在对迭代器的任何操作中抛出异常,则抛出异常。
请注意,无效参数会导致未定义行为

另见