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 呼叫)中丟擲異常,或者在對迭代器的任何操作中丟擲異常,則丟擲異常。
請注意,無效引數會導致未定義行為

另見