C++
std :: forward_list
Ricerca…
introduzione
std::forward_list
è un contenitore che supporta l'inserimento e la rimozione rapida di elementi da qualsiasi posizione nel contenitore. L'accesso casuale rapido non è supportato. È implementato come un elenco collegato singolarmente e, in sostanza, non ha alcun overhead rispetto alla sua implementazione in C. Rispetto a std::list
questo contenitore offre uno spazio più efficiente di storage quando l'iterazione bidirezionale non è necessaria.
Osservazioni
L'aggiunta, la rimozione e lo spostamento degli elementi all'interno dell'elenco o tra più elenchi non invalida gli iteratori che si riferiscono ad altri elementi nell'elenco. Tuttavia, un iteratore o riferimento che fa riferimento a un elemento viene invalidato quando l'elemento corrispondente viene rimosso (tramite erase_after) dall'elenco. std :: forward_list soddisfa i requisiti del Container (eccetto per la funzione membro dimensione e la complessità dell'operatore == è sempre lineare), AllocatorAwareContainer e SequenceContainer.
Esempio
#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';
}
Produzione:
words1: [the, frogurt, is, also, cursed]
words2: [the, frogurt, is, also, cursed]
words3: [the, frogurt, is, also, cursed]
words4: [Mo, Mo, Mo, Mo, Mo]
metodi
Nome del metodo | Definizione |
---|---|
operator= | assegna valori al contenitore |
assign | assegna valori al contenitore |
get_allocator | restituisce l'allocatore associato |
------ | ------ |
Accesso all'elemento | |
front | accedi al primo elemento |
------ | ------ |
iteratori | |
before_begi n | restituisce un iteratore all'elemento prima di iniziare |
cbefore_begin | restituisce un iteratore costante all'elemento prima di iniziare |
begin | restituisce un iteratore all'inizio |
cbegin | restituisce un iteratore const all'inizio |
end | restituisce un iteratore fino alla fine |
cend | restituisce un iteratore fino alla fine |
Capacità | |
empty | controlla se il contenitore è vuoto |
max_size | restituisce il numero massimo possibile di elementi |
modificatori | |
clear | cancella il contenuto |
insert_after | inserisce elementi dopo un elemento |
emplace_after | costruisce elementi sul posto dopo un elemento |
erase_after | cancella un elemento dopo un elemento |
push_front | inserisce un elemento all'inizio |
emplace_front | costruisce un elemento sul posto all'inizio |
pop_front | rimuove il primo elemento |
resize | cambia il numero di elementi memorizzati |
swap | scambia il contenuto |
operazioni | |
merge | unisce due liste ordinate |
splice_after | sposta elementi da un'altra forward_list |
remove | rimuove elementi che soddisfano criteri specifici |
remove_if | rimuove elementi che soddisfano criteri specifici |
reverse | inverte l'ordine degli elementi |
unique | rimuove gli elementi duplicati consecutivi |
sort | ordina gli elementi |