C++
std :: forward_list
Buscar..
Introducción
std::forward_list
es un contenedor que admite la inserción y eliminación rápida de elementos desde cualquier parte del contenedor. El acceso aleatorio rápido no es compatible. Se implementa como una lista enlazada individualmente y, en esencia, no tiene ningún gasto general en comparación con su implementación en C. Comparado con std::list
este contenedor proporciona un almacenamiento más eficiente en espacio cuando no se necesita la iteración bidireccional.
Observaciones
Agregar, eliminar y mover los elementos dentro de la lista, o en varias listas, no invalida los iteradores que actualmente hacen referencia a otros elementos en la lista. Sin embargo, un iterador o referencia que se refiere a un elemento se invalida cuando el elemento correspondiente se elimina (a través de erase_after) de la lista. std :: forward_list cumple con los requisitos de Container (excepto la función de miembro de tamaño y la complejidad de ese operador == es siempre lineal), AllocatorAwareContainer y SequenceContainer.
Ejemplo
#include <forward_list>
#include <string>
#include <iostream>
template<typename T>
std::ostream& operator<<(std::ostream& s, const std::forward_list<T>& v) {
s.put('[');
char comma[3] = {'\0', ' ', '\0'};
for (const auto& e : v) {
s << comma << e;
comma[0] = ',';
}
return s << ']';
}
int main()
{
// c++11 initializer list syntax:
std::forward_list<std::string> words1 {"the", "frogurt", "is", "also", "cursed"};
std::cout << "words1: " << words1 << '\n';
// words2 == words1
std::forward_list<std::string> words2(words1.begin(), words1.end());
std::cout << "words2: " << words2 << '\n';
// words3 == words1
std::forward_list<std::string> words3(words1);
std::cout << "words3: " << words3 << '\n';
// words4 is {"Mo", "Mo", "Mo", "Mo", "Mo"}
std::forward_list<std::string> words4(5, "Mo");
std::cout << "words4: " << words4 << '\n';
}
Salida:
words1: [the, frogurt, is, also, cursed]
words2: [the, frogurt, is, also, cursed]
words3: [the, frogurt, is, also, cursed]
words4: [Mo, Mo, Mo, Mo, Mo]
Métodos
Nombre del método | Definición |
---|---|
operator= | asigna valores al contenedor |
assign | asigna valores al contenedor |
get_allocator | devuelve el asignador asociado |
------ | ------ |
Acceso a elementos | |
front | acceder al primer elemento |
------ | ------ |
Iteradores | |
before_begi n | devuelve un iterador al elemento antes de comenzar |
cbefore_begin | devuelve un iterador constante al elemento antes de comenzar |
begin | regresa un iterador al principio |
cbegin | devuelve un iterador de const al principio |
end | devuelve un iterador al final |
cend | devuelve un iterador al final |
Capacidad | |
empty | comprueba si el contenedor está vacío |
max_size | Devuelve el máximo número posible de elementos. |
Modificadores | |
clear | borra los contenidos |
insert_after | inserta elementos después de un elemento |
emplace_after | construye elementos en el lugar después de un elemento |
erase_after | borra un elemento después de un elemento |
push_front | inserta un elemento al principio |
emplace_front | construye un elemento en el lugar al principio |
pop_front | elimina el primer elemento |
resize | Cambia el número de elementos almacenados. |
swap | intercambia los contenidos |
Operaciones | |
merge | fusiona dos listas ordenadas |
splice_after | Mueve elementos de otro forward_list |
remove | Remueve elementos que satisfacen criterios específicos. |
remove_if | Remueve elementos que satisfacen criterios específicos. |
reverse | invierte el orden de los elementos |
unique | elimina elementos duplicados consecutivos |
sort | ordena los elementos |