C++
std :: forward_list
Szukaj…
Wprowadzenie
std::forward_list
to kontener, który obsługuje szybkie wstawianie i usuwanie elementów z dowolnego miejsca w kontenerze. Szybki losowy dostęp nie jest obsługiwany. Jest on zaimplementowany jako pojedynczo połączona lista i zasadniczo nie ma żadnego narzutu w porównaniu do jego implementacji w C. W porównaniu do std::list
ten kontener zapewnia więcej miejsca zajmującego miejsce, gdy iteracja dwukierunkowa nie jest potrzebna.
Uwagi
Dodawanie, usuwanie i przenoszenie elementów na liście lub na kilku listach nie unieważnia iteratorów odnoszących się obecnie do innych elementów na liście. Jednak iterator lub odwołanie odnoszące się do elementu jest unieważniane, gdy odpowiedni element jest usuwany (przez erase_after) z listy. std :: forward_list spełnia wymagania kontenera (z wyjątkiem funkcji członka rozmiaru i złożoność operatora == jest zawsze liniowa), AllocatorAwareContainer i SequenceContainer.
Przykład
#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';
}
Wynik:
words1: [the, frogurt, is, also, cursed]
words2: [the, frogurt, is, also, cursed]
words3: [the, frogurt, is, also, cursed]
words4: [Mo, Mo, Mo, Mo, Mo]
Metody
Nazwa metody | Definicja |
---|---|
operator= | przypisuje wartości do kontenera |
assign | przypisuje wartości do kontenera |
get_allocator | zwraca powiązany alokator |
------ | ------ |
Dostęp do elementu | |
front | dostęp do pierwszego elementu |
------ | ------ |
Iteratory | |
before_begi n | zwraca iterator do elementu przed rozpoczęciem |
cbefore_begin | zwraca stały iterator do elementu przed rozpoczęciem |
begin | zwraca iterator na początek |
cbegin | zwraca iterator const na początku |
end | zwraca iterator do końca |
cend | zwraca iterator do końca |
Pojemność | |
empty | sprawdza, czy pojemnik jest pusty |
max_size | zwraca maksymalną możliwą liczbę elementów |
Modyfikatory | |
clear | usuwa zawartość |
insert_after | wstawia elementy po elemencie |
emplace_after | konstruuje elementy w miejscu po elemencie |
erase_after | usuwa element po elemencie |
push_front | wstawia element na początek |
emplace_front | na początku konstruuje element w miejscu |
pop_front | usuwa pierwszy element |
resize | zmienia liczbę przechowywanych elementów |
swap | zamienia zawartość |
Operacje | |
merge | scala dwie posortowane listy |
splice_after | przenosi elementy z innej listy forward_list |
remove | usuwa elementy spełniające określone kryteria |
remove_if | usuwa elementy spełniające określone kryteria |
reverse | odwraca kolejność elementów |
unique | usuwa kolejne zduplikowane elementy |
sort | sortuje elementy |