C++ 算法 includes()函数

C++ 算法 includes()函数

C++ 算法 includes() 函数在有序范围[first1, last1)内的每个元素是否都在有序范围[first2, last2)内被找到时返回true。

如果[first2, last2)为空,也返回true。

元素的比较使用第一个版本中的运算符<,或者使用给定的二元比较函数comp来进行第二个版本的比较。

语法

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 : 一个输入迭代器,指向第二个已排序源序列的最后一个元素的下一个位置,用于测试第二个序列的所有元素是否都存在于第一个序列中。

comp : 一个用户定义的二进制断言函数,接受两个参数,如果两个参数按顺序排列则返回true,否则返回false。它遵循严格弱排序来对元素进行排序。

返回值

如果[from, last2)范围内的每个元素都是[first1, last1)范围的成员,则返回true,否则返回false。

复杂度

复杂度与[first1, last1)范围和[first2, last2)范围的距离成线性关系:执行了最多2*(count1+count2)-1次比较。其中,count1 = last1 – first1,count2= last2 – first2。

数据竞争

对范围[first1, last1)和[first2, last2)中的对象进行访问。

异常

如果元素比较或迭代器操作引发异常,此函数会抛出异常。

注意:无效的参数会导致未定义的行为。

示例1

让我们看一个简单的示例来演示使用includes()函数:

#include <iostream>
#include <set>
#include <algorithm>

using namespace std;

int main()
{
  set<int> a = {0, 2, 3, 4, 5, 6};
  set<int> b = {2, 4, 6};
  set<int> c = {2, 4, 7};

  cout << boolalpha;

  cout << includes(a.begin(), a.end(), b.begin(), b.end()) << endl;
  cout << includes(a.begin(), a.end(), c.begin(), c.end()) << endl;

  return 0;
}

输出:

true
false

示例2

让我们看另一个简单的示例:

#include <iostream>
#include <algorithm>
#include <cctype>
#include <vector>

using namespace std;

int main()
{
  vector<char> v1 {'a', 'b', 'c', 'f', 'h', 'x'};
  vector<char> v2 {'a', 'b', 'c'};
  vector<char> v3 {'a', 'c'};
  vector<char> v4 {'g'};
  vector<char> v5 {'a', 'c', 'g'};

  for (auto i : v1) cout << i << ' ';
  cout << "\nincludes:\n" << boolalpha;

  for (auto i : v2) cout << i << ' ';
  cout << ": " << includes(v1.begin(), v1.end(), v2.begin(), v2.end()) << '\n';
  for (auto i : v3) cout << i << ' ';
  cout << ": " << includes(v1.begin(), v1.end(), v3.begin(), v3.end()) << '\n';
  for (auto i : v4) cout << i << ' ';
  cout << ": " << includes(v1.begin(), v1.end(), v4.begin(), v4.end()) << '\n';
  for (auto i : v5) cout << i << ' ';
  cout << ": " << includes(v1.begin(), v1.end(), v5.begin(), v5.end()) << '\n';

  auto cmp_nocase = [](char a, char b) {
    return std::tolower(a) < std::tolower(b);
  };

  vector<char> v6 {'A', 'B', 'C'};
  for (auto i : v6) cout << i << ' ';
  cout << ": (case-insensitive) "
            << includes(v1.begin(), v1.end(), v6.begin(), v6.end(), cmp_nocase)
            << '\n';

  return 0;
}

输出:

a b c f h x 
includes:
a b c : true
a c : true
g : false
a c g : false
A B C : (case-insensitive) true

示例3

让我们看看另一个简单的示例:

#include <iostream>     // std::cout
#include <algorithm>    // std::includes, std::sort

using namespace std;

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};

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

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

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

  return 0;
}

输出:

container includes continent!
container includes continent!

示例4

让我们看一个简单的示例:

#include <iostream>     // std::cout
#include <algorithm>    // std::includes, std::sort

using namespace std; 

int main() 
{ 
    // lottery numbers 
    vector<int> lottery = { 1, 4, 6, 3, 2, 54 , 32 }; 

    // Numbers in user's card 
    vector<int> user = { 1, 2, 4, 6 }; 

    // sorting initial containers 
    sort(lottery.begin(), lottery.end()); 
    sort(user.begin(), user.end()); 

    // using include() check if all elements  
    // of user are present as lottery numbers 
    if(includes(lottery.begin(), lottery.end(), user.begin(), user.end())) 
    cout << "User has won lottery ( all numbers are lottey numbers )"; 
    else 
    cout << "User has not won the lottery"; 

    return 0;    
}

输出:

User has won lottery ( all numbers are lottey numbers )

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程