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

📅  最后修改于: 2020-10-16 09:13:21             🧑  作者: Mango

C++ STL algorithm函数find_end()

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

句法

template
ForwardIterator1 find_end(ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2);

template
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      
#include     
#include        
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 haystack (newints,newints+10);
  int patt1[] = {1,2,3};
  std::vector::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
#include
#include
using namespace std;
int main()
{
    vectoru= {1,3,10,3,10,1,3,3,10,7,8,1,3,10};
    vectoru1={1,3,10};
    vector::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之间的距离。

数据竞争

访问两个范围中的对象。

异常处理

如果任何参数抛出一个异常,该函数将引发异常。