std::unique
Da cppreference.com.
![]() | Questa pagina è stata tradotta in modo automatico dalla versione in ineglese della wiki usando Google Translate. La traduzione potrebbe contenere errori e termini strani. Muovi il puntatore sopra al testo per vedere la versione originale. Puoi aiutarci a correggere gli gli errori. Per ulteriori istruzioni clicca qui. |
Defined in header <algorithm> | ||
template<class ForwardIt > ForwardIt unique( ForwardIt first, ForwardIt last ); | (1) | |
template<class ForwardIt, class BinaryPredicate > ForwardIt unique( ForwardIt first, ForwardIt last, BinaryPredicate p ); | (2) | |
Rimuove tutti gli elementi duplicati consecutivi dal
[first, last)
gamma. Rimozione avviene spostando la gamma quando necessario in modo tale che gli elementi da cancellare vengono sovrascritti. Solo il primo elemento in ciascun gruppo di elementi uguali viene lasciato. Gli elementi tra la vecchia e la nuova estremità o la gamma vengono lasciati intatti. La prima versione utilizza operator==
di confrontare gli elementi, la seconda versione utilizza il predicato binario dato p
.Original:
Removes all consecutive duplicate elements from the range
[first, last)
. Removing is done by shifting the range when needed in such a way that elements to be erased are overwritten. Only the first element in each group of equal elements is left. The elements between the old and the new end or the range are left intact. The first version uses operator==
to compare the elements, the second version uses the given binary predicate p
.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
Indice |
[modifica]Parametri
first, last | - | l'intervallo di elementi di processo Original: the range of elements to process The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
p | - | binary predicate which returns true if the elements should be treated as equal. The signature of the predicate function should be equivalent to the following: bool pred(const Type1 &a, const Type2 &b); The signature does not need to have const&, but the function must not modify the objects passed to it. |
Type requirements | ||
-ForwardIt must meet the requirements of ForwardIterator . | ||
-The type of dereferenced ForwardIt must meet the requirements of MoveAssignable . |
[modifica]Valore di ritorno
Inoltra iteratore alla fine nuovo della gamma
Original:
Forward iterator to the new end of the range
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
[modifica]Possibile implementazione
First version |
---|
template<class ForwardIt> ForwardIt unique(ForwardIt first, ForwardIt last){if(first == last)return last; ForwardIt result = first;while(++first != last){if(!(*result ==*first)){*(++result)=*first;}}return++result;} |
Second version |
template<class ForwardIt, class BinaryPredicate> ForwardIt unique(ForwardIt first, ForwardIt last, BinaryPredicate p){if(first == last)return last; ForwardIt result = first;while(++first != last){if(!p(*result, *first)){*(++result)=*first;}}return++result;} |
[modifica]Esempio
Il codice seguente rimuove tutti gli elementi consecutivi equivalenti da un vettore di interi .
Original:
The following code removes all consecutive equivalent elements from a vector of integers.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
#include <iostream>#include <algorithm>#include <vector> int main(){std::vector<int> v{1, 2, 2, 2, 3, 3, 2, 2, 1};std::vector<int>::iterator last; last = std::unique(v.begin(), v.end());// 1 2 3 2 1 3 2 2 1// ^for(std::vector<int>::iterator it = v.begin(); it != last;++it){std::cout<<*it <<" ";}std::cout<<"\n";}
Output:
1 2 3 2 1
[modifica]Complessità
lineare la distanza tra
first
e last
Original:
linear in the distance between
first
and last
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
[modifica]Vedi anche
trova due identici (o qualche altra relazione) elementi adiacenti l'uno all'altro Original: finds two identical (or some other relationship) items adjacent to each other The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (funzione di modello) | |
crea una copia di alcune serie di elementi che non contiene duplicati consecutivi Original: creates a copy of some range of elements that contains no consecutive duplicates The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (funzione di modello) |