std::forward_list<T,Allocator>:: unique
| (1) | ||
|
void
unique
(
)
;
|
(desde C++11)
(hasta C++20) |
|
|
size_type unique
(
)
;
|
(desde C++20)
(constexpr desde C++26) |
|
| (2) | ||
|
template
<
class
BinaryPred
>
void unique ( BinaryPred p ) ; |
(desde C++11)
(hasta C++20) |
|
|
template
<
class
BinaryPred
>
size_type unique ( BinaryPred p ) ; |
(desde C++20)
(constexpr desde C++26) |
|
Elimina todos los elementos consecutivos duplicados del contenedor. Solo se conserva el primer elemento en cada grupo de elementos iguales.
Invalida únicamente los iteradores y referencias a los elementos eliminados.
Contenidos |
Parámetros
| p | - |
predicado binario que devuelve
true
si los elementos deben tratarse como iguales.
La firma de la función predicado debe ser equivalente a la siguiente: bool pred ( const Type1 & a, const Type2 & b ) ;
Aunque la firma no necesita tener
const
&
, la función no debe modificar los objetos pasados a ella y debe poder aceptar todos los valores de tipo (posiblemente const)
|
| Requisitos de tipo | ||
-
BinaryPred
debe cumplir con los requisitos de
BinaryPredicate
.
|
||
Valor de retorno
|
(ninguno) |
(until C++20) |
|
El número de elementos eliminados. |
(since C++20) |
Complejidad
Si empty() es true , no se realiza ninguna comparación.
De lo contrario, dado N como std:: distance ( begin ( ) , end ( ) ) :
Notas
| Macro de prueba de características | Valor | Std | Característica |
|---|---|---|---|
__cpp_lib_list_remove_return_type
|
201806L
|
(C++20) | Cambiar el tipo de retorno |
Ejemplo
#include <iostream> #include <forward_list> std::ostream& operator<< (std::ostream& os, std::forward_list<int> const& container) { for (int val : container) os << val << ' '; return os << '\n'; } int main() { std::forward_list<int> c{1, 2, 2, 3, 3, 2, 1, 1, 2}; std::cout << "Before unique(): " << c; const auto count1 = c.unique(); std::cout << "After unique(): " << c << count1 << " elements were removed\n"; c = {1, 2, 12, 23, 3, 2, 51, 1, 2, 2}; std::cout << "\nBefore unique(pred): " << c; const auto count2 = c.unique([mod = 10](int x, int y) { return (x % mod) == (y % mod); }); std::cout << "After unique(pred): " << c << count2 << " elements were removed\n"; }
Salida:
Before unique(): 1 2 2 3 3 2 1 1 2 After unique(): 1 2 3 2 1 2 3 elements were removed Before unique(pred): 1 2 12 23 3 2 51 1 2 2 After unique(pred): 1 2 23 2 51 2 4 elements were removed
Véase también
|
elimina elementos duplicados consecutivos en un rango
(plantilla de función) |