unique (<algorithm>)
Odstraní duplicitní prvky, které vzájemně sousedí v dané oblasti.
template<class ForwardIterator>
ForwardIterator unique(
ForwardIterator _First,
ForwardIterator _Last
);
template<class ForwardIterator, class Predicate>
ForwardIterator unique(
ForwardIterator _First,
ForwardIterator _Last,
Predicate _Comp
);
Parametry
_First
Vpřed iterační adresování pozici první prvek v rozsahu mají být hledány odstraňování duplikátů._Last
Vpřed iterační adresování pozice jeden za poslední prvek v rozsahu mají být hledány odstraňování duplikátů._Comp
Uživatelem definované funkce predikátu objektu, který definuje podmínky splněny, pokud jsou dva prvky mají být přijata jako rovnocenné.Binárního predikátu trvá dva argumenty a vrátí true -li splněna a false Pokud nejsou splněny.
Vrácená hodnota
Dopředu iterační nový konec upravené posloupnost, která neobsahuje duplicitní položky po sobě, adresování jednu pozici za poslední prvek není odebrán.
Poznámky
Obě formy algoritmus odebrat duplicitní druhého páru po sobě jdoucích stejné prvky.
Operace algoritmus je stabilní, tak, že se nezmění relativní pořadí prvků obnovena.
Rozsah odkazuje, musí být platná. všechny ukazatele musí být dereferenceable a v pořadí je dostupná z první poslední pozice ve incrementation.algoritmus nezmění jeho číslo v pořadí prvků jedinečné a prvky za koncem upravené sekvence jsou dereferenceable, ale není zadán.
Složitost je lineární vyžadující (_Last – _First) – 1 porovnání.
Seznam poskytuje efektivnější členské funkce jedinečné, může pracovat lépe.
Tyto algoritmy nelze použít asociativní kontejneru.
Příklad
// alg_unique.cpp
// compile with: /EHsc
#include <vector>
#include <algorithm>
#include <functional>
#include <iostream>
#include <ostream>
using namespace std;
// Return whether modulus of elem1 is equal to modulus of elem2
bool mod_equal ( int elem1, int elem2 )
{
if ( elem1 < 0 )
elem1 = - elem1;
if ( elem2 < 0 )
elem2 = - elem2;
return elem1 == elem2;
};
int main( )
{
vector <int> v1;
vector <int>::iterator v1_Iter1, v1_Iter2, v1_Iter3,
v1_NewEnd1, v1_NewEnd2, v1_NewEnd3;
int i;
for ( i = 0 ; i <= 3 ; i++ )
{
v1.push_back( 5 );
v1.push_back( -5 );
}
int ii;
for ( ii = 0 ; ii <= 3 ; ii++ )
{
v1.push_back( 4 );
}
v1.push_back( 7 );
cout << "Vector v1 is ( " ;
for ( v1_Iter1 = v1.begin( ) ; v1_Iter1 != v1.end( ) ; v1_Iter1++ )
cout << *v1_Iter1 << " ";
cout << ")." << endl;
// Remove consecutive duplicates
v1_NewEnd1 = unique ( v1.begin ( ) , v1.end ( ) );
cout << "Removing adjacent duplicates from vector v1 gives\n ( " ;
for ( v1_Iter1 = v1.begin( ) ; v1_Iter1 != v1_NewEnd1 ; v1_Iter1++ )
cout << *v1_Iter1 << " ";
cout << ")." << endl;
// Remove consecutive duplicates under the binary prediate mod_equals
v1_NewEnd2 = unique ( v1.begin ( ) , v1_NewEnd1 , mod_equal );
cout << "Removing adjacent duplicates from vector v1 under the\n "
<< " binary predicate mod_equal gives\n ( " ;
for ( v1_Iter2 = v1.begin( ) ; v1_Iter2 != v1_NewEnd2 ; v1_Iter2++ )
cout << *v1_Iter2 << " ";
cout << ")." << endl;
// Remove elements if preceded by an element that was greater
v1_NewEnd3 = unique ( v1.begin ( ) , v1_NewEnd2, greater<int>( ) );
cout << "Removing adjacent elements satisfying the binary\n "
<< " predicate mod_equal from vector v1 gives ( " ;
for ( v1_Iter3 = v1.begin( ) ; v1_Iter3 != v1_NewEnd3 ; v1_Iter3++ )
cout << *v1_Iter3 << " ";
cout << ")." << endl;
}
Požadavky
Záhlaví: <algorithm>
Obor názvů: std