📜  C++ STL-algorithm.include()函数

📅  最后修改于: 2020-10-17 06:26:37             🧑  作者: Mango

C++ STL algorithminclude()

如果在排序范围[first1,last1)中找到排序范围[first2,last2)中的每个元素,则C++ Algorithm include()函数将返回true。

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

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

句法

template 
  bool includes ( InputIterator1 first1, InputIterator1 last1,
                  InputIterator2 first2, InputIterator2 last2);

template 
  bool includes ( InputIterator1 first1, InputIterator1 last1,
                  InputIterator2 first2, InputIterator2 last2, Compare comp);

参数

first1:一个输入迭代器,它指向两个已排序源序列中第一个元素中的第一个元素,以测试第二个元素序列中的所有元素是否都被第一个元素占用。

last1:一个输入迭代器,它指向要测试的第二个源序列中的第一个序列中的最后一个最后一个元素,以检查第二个元素中是否包含所有第二个元素。

first2:一个输入迭代器,它指向第二个已排序源序列中的第一个元素,以测试第二个元素是否包含在第一个元素中。

last2:一个输入迭代器,指向第二个已排序源序列中的最后一个元素,以测试第二个元素是否包含在第一个元素中。

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

返回值

如果[first2,last2)中的每个元素都是[first1,last1)的成员,则此函数返回true,否则返回false。

复杂度

[first1,last1)和[first2,last2)之间的距离的复杂度是线性的:最多进行2 *(count1 + count2)-1个比较。其中count1 = last1- first1,count2 = last2- first2。

数据竞争

[first1,last1)和[first2。范围内的对象。 last2)被访问。

异常处理

如果任何元素比较或对迭代器的操作抛出异常,则此函数将引发异常。

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

例子1

让我们看一个简单的示例来演示include()的用法:

#include 
#include 
#include 

using namespace std;

int main()
{
  set a = {0, 2, 3, 4, 5, 6};
  set b = {2, 4, 6};
  set 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 
#include 
#include 
#include 

using namespace std;
 
int main()
{
  vector v1 {'a', 'b', 'c', 'f', 'h', 'x'};
  vector v2 {'a', 'b', 'c'};
  vector v3 {'a', 'c'};
  vector v4 {'g'};
  vector 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 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      // std::cout
#include     // std::includes, std::sort

using namespace std;

bool myfunction (int i, int j) { return i

输出:

container includes continent!
container includes continent!

例子4

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

#include      // std::cout
#include     // std::includes, std::sort

using namespace std; 
  
int main() 
{ 
    // lottery numbers 
    vector lottery = { 1, 4, 6, 3, 2, 54 , 32 }; 
      
    // Numbers in user's card 
    vector 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 )