当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C++ find_first_of()用法及代码示例


C++ 算法 find_first_of() 函数比较存储在两个容器中的值,即 [first1, last1) 和 [first2, last2)。如果在 [first1, last1) 中找到与 [first2, last2) 范围内的元素相似的元素,则该函数返回该元素的迭代器。在两个范围中都存在多个相似元素的情况下,返回第一个相似元素的迭代器。如果出现范围内没有两个元素是共同的情况,则返回指向 last1 元素的迭代器。

用法

template<class ForwardIterator1, classForwardIterator2>
ForwardIterator1 find_first_of(ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2);

template<class ForwardIterator1, class ForwardIterator2, class BinaryPredicate>
ForwardIterator1 find_first_of(ForwardIterator1 first1,ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2, BinaryPredicate pred);

参数

first1:它是指向范围 [first1, last1) 中第一个元素的前向迭代器,其中元素本身包含在范围内。

last1:它是指向范围 [first1, last1) 中最后一个元素的前向迭代器,其中元素本身不包含在范围内。

first2:它是一个前向迭代器,指向范围 [first2, last2) 中的第一个元素,其中元素本身包含在范围内。

last2:它是到范围 [first2, last2) 中最后一个元素的前向迭代器,其中元素本身不包含在范围内。

pred: 它是一个二元函数,它接受两个元素作为参数并执行函数设计的任务。

返回值

该函数返回一个迭代器,指向范围 [first1, last1) 的第一个公共元素,该元素也是范围 [first2,last2) 的一部分。如果没有找到这样的元素,则函数返回 last1 元素。

例子1

#include <iostream>     
#include <algorithm>    
#include <vector>       
#include <cctype>       
bool case_insensitive (char a1, char a2) 
{
  return (std::tolower(a1)==std::tolower(a2));
}
int main () 
{
  int newchars[] = {'a','b','c','A','B','C'};
  std::vector<char> haystack (newchars,newchars+6);
  std::vector<char>::iterator ti;
  int patt[] = {'A','B','C'};
  ti = find_first_of (haystack.begin(), haystack.end(), patt, patt+3);
  if (ti!=haystack.end())
  std::cout << "Match 1 is:" << *ti << '\n';
  ti = find_first_of (haystack.begin(), haystack.end(),
  patt, patt+3, case_insensitive);
  if (ti!=haystack.end())
  std::cout << "Match 1 is:" << *ti << '\n';
  return 0;
}

输出:

Match 1 is:A
Match 1 is:a

例子2

#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
	string str1 = "We are trying to get an idea of the 	find_first_of function in C++";
	string str2= {'a','A','e','E','i','I','o','O','u','U'};
	 auto pi = std::find_first_of(str1.begin(), str1.end(), str2.begin(), str2.end());
	cout<<"First vowel has been discovered at index "<<(pi-str1.begin())<<"\n";
	return 0;
}

输出:

First vowel has been discovered at index 1

复杂度

函数的复杂度由 count1*count2 指定。这里 countX 指定 firstX 和 lastX 之间的距离。比较一直进行到找到匹配的元素为止。

数据竞争

从这两个范围访问一些元素。

异常

如果任何参数抛出异常,该函数将抛出异常。






相关用法


注:本文由纯净天空筛选整理自 C++ Algorithm Function find_first_of()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。