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

partition

 

Ordena elementos en un intervalo en dos conjuntos disjuntos, con los elementos satisfaciendo un predicado unario que precede a los que no puedan para satisfacerlo.

template<class BidirectionalIterator, class Predicate>
   BidirectionalIterator partition(
      BidirectionalIterator _First, 
      BidirectionalIterator _Last, 
      Predicate _Comp
   );

_First

Un iterador bidireccional que dirige la posición del primer elemento del intervalo que se va a crear particiones.

_Last

Un iterador bidireccional que dirige la posición una más allá del último elemento en el intervalo que se va a crear particiones.

_Comp

Objeto definido por el usuario de la función de predicado que define la condición que se completará si se va un elemento a ajustar su tamaño.  Un predicado toma un único argumento y devuelve true o false.  

Un iterador bidireccional que dirige la posición del primer elemento del intervalo para no cumplir la condición de predicado.

El intervalo hace referencia debe ser válido; todos los punteros deben ser dereferenceable y dentro de la secuencia la posición última es accesible de primera por el aumento.

Los elementos a y b son equivalentes, pero son iguales no necesariamente, si ambos banda (a, b)es false y banda (b, a)si es false, donde es el predicado banda parámetro- especificado.  El algoritmo de partition no es estable y no garantiza que el orden relativo de elementos equivalentes se conservará.  El algoritmo stable_ partition conserva esta clasificación original.  

La complejidad es lineal: hay (_Last – _First) aplicación de _Comp y como máximo (_Last –)/2 intercambios de_First.

Ejemplo

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

bool greater5 ( int value ) {
   return value >5;
}

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

   int i;
   for ( i = 0 ; i <= 10 ; i++ )
   {
      v1.push_back( i );
   }
   random_shuffle( v1.begin( ), v1.end( ) );

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

   // Partition the range with predicate greater10
   partition ( v1.begin( ), v1.end( ), greater5 );
   cout << "The partitioned set of elements in v1 is: ( " ;
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout << *Iter1 << " ";
   cout << ")." << endl;
}

Vector v1 is ( 10 1 9 2 0 5 7 3 4 6 8 ).
The partitioned set of elements in v1 is: ( 10 8 9 6 7 5 0 3 4 2 1 ).

Requisitos

Encabezado: <algorithm>

Espacio de nombres: std

Mostrar: