Para ver el artículo en inglés, active la casilla Inglés. También puede ver el texto en inglés en una ventana emergente si pasa el puntero del mouse por el texto.
Traducción
Inglés

find_end

 

Busca en un intervalo la última subsecuencia que es idéntica a una secuencia especificada o que es equivalente según lo especificado por un predicado binario.

template<class ForwardIterator1, class ForwardIterator2>
   ForwardIterator1 find_end(
      ForwardIterator1 First1, 
      ForwardIterator1 Last1,
      ForwardIterator2 First2, 
      ForwardIterator2 Last2
   );
template<class ForwardIterator1, class ForwardIterator2, class Pred>
   ForwardIterator1 find_end(
      ForwardIterator1 First1, 
      ForwardIterator1 Last1,
      ForwardIterator2 First2, 
      ForwardIterator2 Last2,
      Pred Comp
   );

First1

Iterador hacia delante que dirige a la posición del primer elemento del intervalo en el que se buscará.

Last1

Iterador hacia delante que dirige a la posición situada una posición después del último elemento del intervalo en el que se buscará.

First2

Iterador hacia delante que dirige a la posición del primer elemento del intervalo en el que se buscará.

Last2

Iterador hacia delante que dirige a la posición del último elemento del intervalo en el que se buscará.

Comp

Objeto de función de predicado definido por el usuario que define la condición que se debe cumplir si dos elementos se van a tomar como equivalentes. Un predicado binario toma dos argumentos y devuelve true si se cumplen y false si no se cumplen.

Iterador hacia delante que dirige a la posición del primer elemento de la última subsecuencia dentro de [First1, Last1) que coincide con la secuencia especificada [First2, Last2).

El operator== que se usa para determinar la coincidencia entre un elemento y el valor especificado debe imponer una relación de equivalencia entre sus operandos.

Los intervalos a los que se hace referencia deben ser válidos: todos los punteros deben poder desreferenciarse y, dentro de cada secuencia, se debe poder acceder a la última posición desde la primera con incrementos.

Ejemplo

// alg_find_end.cpp
// compile with: /EHsc
#include <vector>
#include <list>
#include <algorithm>
#include <iostream>

// Return whether second element is twice the first
bool twice ( int elem1, int elem2 )
{
   return 2 * elem1 == elem2;
}

int main( )
{
   using namespace std;
   vector <int> v1, v2;
   list <int> L1;
   vector <int>::iterator Iter1, Iter2;
   list <int>::iterator L1_Iter, L1_inIter;

   int i;
   for ( i = 0 ; i <= 5 ; i++ )
   {
      v1.push_back( 5 * i );
   }
   for ( i = 0 ; i <= 5 ; i++ )
   {
      v1.push_back( 5 * i );
   }

   int ii;
   for ( ii = 1 ; ii <= 4 ; ii++ )
   {
      L1.push_back( 5 * ii );
   }

   int iii;
   for ( iii = 2 ; iii <= 4 ; iii++ )
   {
      v2.push_back( 10 * iii );
   }

   cout << "Vector v1 = ( " ;
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout << *Iter1 << " ";
   cout << ")" << endl;

   cout << "List L1 = ( " ;
   for ( L1_Iter = L1.begin( ) ; L1_Iter!= L1.end( ) ; L1_Iter++ )
      cout << *L1_Iter << " ";
   cout << ")" << endl;

   cout << "Vector v2 = ( " ;
   for ( Iter2 = v2.begin( ) ; Iter2 != v2.end( ) ; Iter2++ )
      cout << *Iter2 << " ";
      cout << ")" << endl;

   // Searching v1 for a match to L1 under identity
   vector <int>::iterator result1;
   result1 = find_end ( v1.begin( ), v1.end( ), L1.begin( ), L1.end( ) );

   if ( result1 == v1.end( ) )
      cout << "There is no match of L1 in v1."
           << endl;
   else
      cout << "There is a match of L1 in v1 that begins at "
           << "position "<< result1 - v1.begin( ) << "." << endl;

   // Searching v1 for a match to L1 under the binary predicate twice
   vector <int>::iterator result2;
   result2 = find_end ( v1.begin( ), v1.end( ), v2.begin( ), v2.end( ), twice );

   if ( result2 == v1.end( ) )
      cout << "There is no match of L1 in v1."
           << endl;
   else
      cout << "There is a sequence of elements in v1 that "
           << "are equivalent to those\n in v2 under the binary "
           << "predicate twice and that begins at position "
           << result2 - v1.begin( ) << "." << endl;
}
            Vector v1 = ( 0 5 10 15 20 25 0 5 10 15 20 25 )
Lista L1 = ( 5 10 15 20 )
Vector v2 = ( 20 30 40 )
Hay una coincidencia de L1 en v1 que comienza en la posición 7.  Hay una secuencia de elementos de v1 que son equivalentes a los
 de v2 en el predicado binario, dos veces, y la secuencia comienza en la posición 8.  

Requisitos

Encabezado: <algorithm>

Espacio de nombres: std

Mostrar: