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


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


C++ 算法 find_end()function 搜索容器中模式的最后一次出现,或者说容器中一小部分序列的最后一次出现。它本质上在 [first1,last1) 指定的范围内搜索由 [first2,last2) 定义的序列的出现。如果找到,则返回第一个元素的迭代器,否则返回 last1。

用法

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

template<class ForwardIterator1, class ForwardIterator2, class BinaryPredicate>
ForwardIterator1 find_end(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>       
bool newfunction (int m, int n) 
{
  return (m==n);
}
int main () 
{
  int newints[] = {1,2,3,4,5,1,2,3,4,5};
  std::vector<int> haystack (newints,newints+10);
  int patt1[] = {1,2,3};
  std::vector<int>::iterator ti;
  ti = std::find_end (haystack.begin(), haystack.end(), patt1, patt1+3);
  if (ti!=haystack.end())
  std::cout << "patt1 last found at position " << (ti-haystack.begin()) << '\n';
  int patt2[] = {4,5,1};
  ti = std::find_end (haystack.begin(), haystack.end(), patt2, patt2+3, newfunction);
  if (ti!=haystack.end())
  std::cout << "patt2 last found at position " << (ti-haystack.begin()) << '\n';
  return 0;
}

输出:

patt1 is last found at the position 5
patt2 is last found at the position 3

例子2

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
	vector<int>u= {1,3,10,3,10,1,3,3,10,7,8,1,3,10};
	vector<int>u1={1,3,10};
	vector<int>::iterator ti;
	ti=std::find_end(u.begin(),u.end(),u1.begin(),u1.end());
	cout<<(ti-u.begin())<<"\n";
	return 0;
}

输出:

11

复杂度

函数的复杂度由count2*(1+count1-count2.这里countX指定firstX和lastX之间的距离指定。

数据竞争

访问两个范围内的对象。

异常

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






相关用法


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