forward_list — Klasa
Opisuje obiekt, który kontroluje sekwencję elementów o różnej długości. Sekwencja jest przechowywana jako singly-linked list węzłów, z których każda zawiera element członkowski typu Type
.
Składnia
template <class Type,
class Allocator = allocator<Type>>
class forward_list
Parametry
Typ*
Typ danych elementu, który ma być przechowywany w forward_list.
Programu przydzielania
Przechowywany obiekt alokatora, który hermetyzuje szczegóły dotyczące alokacji forward_list i cofania alokacji pamięci. Ten parametr jest opcjonalny. Wartość domyślna to alokator<Type
>.
Uwagi
Obiekt forward_list
przydziela i zwalnia magazyn dla sekwencji, którą kontroluje za pośrednictwem przechowywanego obiektu klasy Allocator, który jest oparty na klasie alokatora (powszechnie znanej jako std::allocator)
. Aby uzyskać więcej informacji, zobacz Alokatory. Obiekt alokatora musi mieć ten sam interfejs zewnętrzny co obiekt typu allocator
.
Uwaga
Przechowywany obiekt alokatora nie jest kopiowany po przypisaniu obiektu kontenera.
Iteratory, wskaźniki i odwołania mogą stać się nieprawidłowe, gdy elementy ich kontrolowanej sekwencji zostaną wymazane za pomocą metody forward_list
. Operacje wstawiania i splice wykonywane w kontrolowanej sekwencji forward_list
nie unieważniają iteratorów.
Dodatki do kontrolowanej sekwencji mogą wystąpić przez wywołania do forward_list::insert_after, która jest jedyną funkcją składową, która wywołuje konstruktor Type(const T&)
. forward_list
może również wywoływać konstruktory przenoszenia. Jeśli takie wyrażenie zgłasza wyjątek, obiekt kontenera nie wstawia żadnych nowych elementów i ponownie zgłasza wyjątek. W związku z tym obiekt typu forward_list
pozostaje w znanym stanie, gdy wystąpią takie wyjątki.
Elementy członkowskie
Konstruktory
Nazwa/nazwisko | opis |
---|---|
forward_list | Tworzy obiekt typu forward_list . |
Typedefs
Nazwa/nazwisko | opis |
---|---|
allocator_type | Typ reprezentujący klasę alokatora dla obiektu listy przesyłania dalej. |
const_iterator | Typ, który udostępnia iterator stały dla listy do przodu. |
const_pointer | Typ, który dostarcza wskaźnik do const elementu na liście do przodu. |
const_reference | Typ, który zapewnia stałe odwołanie do elementu na liście przesyłania dalej. |
difference_type | Typ liczby całkowitej ze znakiem, który może służyć do reprezentowania liczby elementów listy do przodu w zakresie między elementami wskazywanym przez iteratory. |
Sterująca | Typ, który udostępnia iterator dla listy do przodu. |
wskaźnik | Typ, który dostarcza wskaźnik do elementu na liście do przodu. |
odniesienie | Typ, który zawiera odwołanie do elementu na liście przesyłania dalej. |
size_type | Typ reprezentujący niepodpisaną odległość między dwoma elementami. |
value_type | Typ reprezentujący typ elementu przechowywanego na liście do przodu. |
Funkcje
Nazwa/nazwisko | opis |
---|---|
przypisać | Usuwa elementy z listy do przodu i kopiuje nowy zestaw elementów do docelowej listy przesyłania dalej. |
before_begin | Zwraca iterator odnoszący się do pozycji przed pierwszym elementem na liście do przodu. |
zaczynać | Zwraca iterator odnoszący się do pierwszego elementu na liście do przodu. |
cbefore_begin | Zwraca iterator const odnoszący się do pozycji przed pierwszym elementem na liście do przodu. |
cbegin | Zwraca iterator const odnoszący się do pierwszego elementu na liście do przodu. |
cend | Zwraca iterator const, który adresuje lokalizację, która zakończyła się powodzeniem ostatniego elementu na liście przesyłania dalej. |
jasny | Usuwa wszystkie elementy listy do przodu. |
emplace_after | Przeniesienie konstruuje nowy element po określonej pozycji. |
emplace_front | Dodaje element skonstruowany na początku listy. |
empty | Sprawdza, czy lista przesyłania dalej jest pusta. |
koniec | Zwraca iterator, który adresuje lokalizację, która zakończyła się powodzeniem ostatniego elementu na liście przesyłania dalej. |
erase_after | Usuwa elementy z listy do przodu po określonej pozycji. |
front | Zwraca odwołanie do pierwszego elementu na liście do przodu. |
get_allocator | Zwraca kopię obiektu alokatora używanego do konstruowania listy przesyłania dalej. |
insert_after | Dodaje elementy do listy do przodu po określonej pozycji. |
max_size | Zwraca maksymalną długość listy do przodu. |
połączyć | Usuwa elementy z listy argumentów, wstawia je do docelowej listy przesyłania dalej i porządkuje nowy, połączony zestaw elementów w kolejności rosnącej lub w innej określonej kolejności. |
pop_front | Usuwa element na początku listy do przodu. |
push_front | Dodaje element na początku listy do przodu. |
remove | Usuwa elementy z listy do przodu, która pasuje do określonej wartości. |
remove_if | Usuwa elementy z listy do przodu, dla której jest spełniony określony predykat. |
Zmienić rozmiar | Określa nowy rozmiar listy do przodu. |
reverse | Odwraca kolejność, w jakiej elementy występują na liście do przodu. |
sort | Rozmieszcza elementy w kolejności rosnącej lub z kolejnością określoną przez predykat. |
splice_after | Tworzy łącza między węzłami. |
zamiana | Wymienia elementy dwóch list przesyłania dalej. |
unique | Usuwa sąsiadujące elementy, które przechodzą określony test. |
Operatory
Nazwa/nazwisko | opis |
---|---|
operator = | Zamienia elementy listy do przodu na kopię innej listy do przodu. |
allocator_type
Typ reprezentujący klasę alokatora dla obiektu listy przesyłania dalej.
typedef Allocator allocator_type;
Uwagi
allocator_type
jest synonimem allocator parametru szablonu.
przypisywanie
Usuwa elementy z listy do przodu i kopiuje nowy zestaw elementów do docelowej listy przesyłania dalej.
void assign(
size_type Count,
const Type& Val);
void assign(
initializer_list<Type> IList);
template <class InputIterator>
void assign(InputIterator First, InputIterator Last);
Parametry
pierwszy
Początek zakresu zastępczego.
ostatni
Koniec zakresu zastępczego.
count
Liczba elementów do przypisania.
Val
Wartość do przypisania każdego elementu.
Type
Typ wartości.
IList
Initializer_list do skopiowania.
Uwagi
Jeśli forward_list jest typem całkowitym, pierwsza funkcja składowa zachowuje się tak samo jak assign((size_type)First, (Type)Last)
. W przeciwnym razie pierwsza funkcja składowa zastępuje sekwencję kontrolowaną przez *this
sekwencję [ First, Last)
, która nie może nakładać się na początkową kontrolowaną sekwencję.
Druga funkcja składowa zastępuje sekwencję kontrolowaną przez *this
powtórzenie Count
elementów wartości Val
.
Trzecia funkcja składowa kopiuje elementy initializer_list do forward_list.
before_begin
Zwraca iterator odnoszący się do pozycji przed pierwszym elementem na liście do przodu.
const_iterator before_begin() const;
iterator before_begin();
Wartość zwracana
Iterator do przodu, który wskazuje tuż przed pierwszym elementem sekwencji (lub tuż przed końcem pustej sekwencji).
Uwagi
zaczynać
Zwraca iterator odnoszący się do pierwszego elementu na liście do przodu.
const_iterator begin() const;
iterator begin();
Wartość zwracana
Iterator do przodu, który wskazuje na pierwszy element sekwencji (lub tuż poza końcem pustej sekwencji).
Uwagi
cbefore_begin
Zwraca iterator const odnoszący się do pozycji przed pierwszym elementem na liście do przodu.
const_iterator cbefore_begin() const;
Wartość zwracana
Iterator do przodu, który wskazuje tuż przed pierwszym elementem sekwencji (lub tuż przed końcem pustej sekwencji).
Uwagi
cbegin
const
Zwraca iterator, który adresuje pierwszy element w zakresie.
const_iterator cbegin() const;
Wartość zwracana
const
Iterator dostępu do przodu, który wskazuje na pierwszy element zakresu lub lokalizację tuż poza końcem pustego zakresu (dla pustego zakresu, cbegin() == cend()
).
Uwagi
Przy zwracanej wartości cbegin
elementu nie można modyfikować elementów w zakresie.
Możesz użyć tej funkcji składowej zamiast funkcji składowej begin()
, aby zagwarantować, że zwracana wartość to const_iterator
. Zazwyczaj jest używany ze słowem kluczowym potrącenia typu automatycznego , jak pokazano w poniższym przykładzie. W tym przykładzie rozważmy Container
, aby być kontenerem modyfikowalnym (innym niż const
) jakiegokolwiek rodzaju, który obsługuje begin()
i cbegin()
.
auto i1 = Container.begin();
// i1 is Container<T>::iterator
auto i2 = Container.cbegin();
// i2 is Container<T>::const_iterator
cend
Zwraca iterator, który adresuje lokalizację const
tuż poza ostatnim elementem w zakresie.
const_iterator cend() const;
Wartość zwracana
Iterator dostępu do przodu, który wskazuje tuż za koniec zakresu.
Uwagi
cend
służy do testowania, czy iterator przeszedł koniec jego zakresu.
Możesz użyć tej funkcji składowej zamiast funkcji składowej end()
, aby zagwarantować, że zwracana wartość to const_iterator
. Zazwyczaj jest używany ze słowem kluczowym potrącenia typu automatycznego , jak pokazano w poniższym przykładzie. W tym przykładzie rozważmy Container
, aby być kontenerem modyfikowalnym (innym niż const
) jakiegokolwiek rodzaju, który obsługuje end()
i cend()
.
auto i1 = Container.end();
// i1 is Container<T>::iterator
auto i2 = Container.cend();
// i2 is Container<T>::const_iterator
Wartość zwracana przez cend
nie powinna być wyłuszczone.
jasny
Usuwa wszystkie elementy listy do przodu.
void clear();
Uwagi
Ta funkcja składowa wywołuje funkcję erase_after(before_begin(), end())
.
const_iterator
Typ, który udostępnia iterator stały dla listy do przodu.
typedef implementation-defined const_iterator;
Uwagi
const_iterator
Opisuje obiekt, który może służyć jako stały iterator do przodu dla kontrolowanej sekwencji. Jest on opisany tutaj jako synonim typu zdefiniowanego przez implementację.
const_pointer
Typ, który dostarcza wskaźnik do const
elementu na liście do przodu.
typedef typename Allocator::const_pointer
const_pointer;
Uwagi
const_reference
Typ, który zapewnia stałe odwołanie do elementu na liście przesyłania dalej.
typedef typename Allocator::const_reference const_reference;
Uwagi
difference_type
Typ liczby całkowitej ze znakiem, który może służyć do reprezentowania liczby elementów listy do przodu w zakresie między elementami wskazywanym przez iteratory.
typedef typename Allocator::difference_type difference_type;
Uwagi
difference_type
Opisuje obiekt, który może reprezentować różnicę między adresami wszystkich dwóch elementów w kontrolowanej sekwencji.
emplace_after
Przeniesienie konstruuje nowy element po określonej pozycji.
template <class T>
iterator emplace_after(const_iterator Where, Type&& val);
Parametry
Gdzie
Pozycja na liście do przodu docelowego, na której jest skonstruowany nowy element.
Val
Argument konstruktora.
Wartość zwracana
Iterator, który wyznacza nowo wstawiony element.
Uwagi
Ta funkcja składowa wstawia element z argumentami konstruktora val tuż po elemencie wskazywanym przez Where w kontrolowanej sekwencji. Jego zachowanie jest w przeciwnym razie takie samo jak forward_list::insert_after.
emplace_front
Dodaje element skonstruowany na początku listy.
template <class Type>
void emplace_front(Type&& val);
Parametry
Val
Element dodany na początku listy do przodu.
Uwagi
Ta funkcja składowa wstawia element z argumentami konstruktora _ val
na końcu kontrolowanej sekwencji.
Jeśli zostanie zgłoszony wyjątek, kontener pozostanie niezauniknięty, a wyjątek zostanie ponownie zgłoszony.
empty
Sprawdza, czy lista przesyłania dalej jest pusta.
bool empty() const;
Wartość zwracana
true
jeśli lista przesyłania dalej jest pusta; w przeciwnym razie, false
.
end
Zwraca iterator, który adresuje lokalizację, która zakończyła się powodzeniem ostatniego elementu na liście przesyłania dalej.
const_iterator end() const;
iterator end();
Wartość zwracana
Iterator do przodu, który wskazuje tuż poza końcem sekwencji.
erase_after
Usuwa elementy z listy do przodu po określonej pozycji.
iterator erase_after(const_iterator Where);
iterator erase_after(const_iterator first, const_iterator last);
Parametry
Gdzie
Pozycja na liście do przodu docelowego, na której element jest wymazany.
pierwszy
Początek zakresu do wymazywania.
ostatni
Koniec zakresu do wymazywania.
Wartość zwracana
Iterator, który wyznacza pierwszy element pozostały poza usuniętymi elementami lub forward_list::end , jeśli taki element nie istnieje.
Uwagi
Pierwsza funkcja składowa usuwa element kontrolowanej sekwencji tuż po where.
Druga funkcja składowa usuwa elementy kontrolowanej sekwencji w zakresie ( first, last)
(żaden punkt końcowy nie jest uwzględniony).
Wymazywanie elementów powoduje N
wywołania N
destruktora. Reallocation występuje, więc iteratory i odwołania stają się nieprawidłowe dla wymazanych elementów.
Funkcje składowe nigdy nie zgłaszają wyjątku.
forward_list
Tworzy obiekt typu forward_list
.
forward_list();
explicit forward_list(const Allocator& Al);
explicit forward_list(size_type Count);
forward_list(size_type Count, const Type& Val);
forward_list(size_type Count, const Type& Val, const Allocator& Al);
forward_list(const forward_list& Right);
forward_list(const forward_list& Right, const Allocator& Al);
forward_list(forward_list&& Right);
forward_list(forward_list&& Right, const Allocator& Al);
forward_list(initializer_list<Type> IList, const Alloc& Al);
template <class InputIterator>
forward_list(InputIterator First, InputIterator Last);
template <class InputIterator>
forward_list(InputIterator First, InputIterator Last, const Allocator& Al);
Parametry
Al
Klasa alokatora do wykorzystania z tym obiektem.
Licznik
Liczba elementów na skonstruowanej liście.
Val
Wartość elementów na liście skonstruowanych.
Right
Lista, której skonstruowana lista ma być kopią.
Pierwszy
Położenie pierwszego elementu w zakresie elementów do skopiowania.
Ostatni
Położenie pierwszego elementu poza zakresem elementów do skopiowania.
IList
Initializer_list do skopiowania.
Uwagi
Wszystkie konstruktory przechowują alokator i inicjują kontrolowaną sekwencję. Obiekt alokatora jest argumentem Al, jeśli istnieje. W przypadku konstruktora kopiowania jest to right.get_allocator()
. W przeciwnym razie jest to Allocator()
.
Dwa pierwsze konstruktory określają pustą, początkową kontrolowaną sekwencję.
Trzeci konstruktor określa powtórzenie liczby elementów wartości Type()
.
Czwarte i piąte konstruktory określają powtórzenie liczby elementów wartości Val.
Szósty konstruktor określa kopię sekwencji kontrolowanej przez prawo. Jeśli InputIterator
jest typem liczb całkowitych, dwa następne konstruktory określają powtórzenie (size_type)First
elementów wartości (Type)Last
. W przeciwnym razie dwa następne konstruktory określają sekwencję [First, Last)
.
Dziewiąte i dziesiąte konstruktory są takie same jak szósty, ale z odwołaniem rvalue .
Ostatni konstruktor określa początkową kontrolowaną sekwencję z obiektem klasy initializer_list<Type>
.
front
Zwraca odwołanie do pierwszego elementu na liście do przodu.
reference front();
const_reference front() const;
Wartość zwracana
Odwołanie do pierwszego elementu kontrolowanej sekwencji, który musi być niepusty.
get_allocator
Zwraca kopię obiektu alokatora używanego do konstruowania listy przesyłania dalej.
allocator_type get_allocator() const;
Wartość zwracana
Przechowywany obiekt alokatora .
insert_after
Dodaje elementy do listy do przodu po określonej pozycji.
iterator insert_after(const_iterator Where, const Type& Val);
void insert_after(const_iterator Where, size_type Count, const Type& Val);
void insert_after(const iterator Where, initializer_list<Type> IList);
iterator insert_after(const_iterator Where, Type&& Val);
template <class InputIterator>
void insert_after(const_iterator Where, InputIterator First, InputIterator Last);
Parametry
Gdzie
Pozycja na liście do przodu docelowego, na której wstawiono pierwszy element.
Licznik
Liczba elementów do wstawienia.
Pierwszy
Początek zakresu wstawiania.
Ostatni
Koniec zakresu wstawiania.
Val
Element dodany do listy do przodu.
IList
Initializer_list do wstawienia.
Wartość zwracana
Iterator, który wyznacza nowo wstawiony element (tylko funkcje pierwszego i ostatniego elementu członkowskiego).
Uwagi
Każda z funkcji składowych wstawia — tuż po elemencie wskazywanym przez element Where w kontrolowanej sekwencji — sekwencję określoną przez pozostałe operandy.
Pierwsza funkcja składowa wstawia element o wartości Val i zwraca iterator, który wyznacza nowo wstawiony element.
Druga funkcja składowa wstawia powtórzenie elementów count wartości Val.
Jeśli InputIterator
jest typem całkowitym, trzecia funkcja składowa zachowuje się tak samo jak insert(it, (size_type)First, (Type)Last)
. W przeciwnym razie wstawia sekwencję [First, Last)
, która nie może nakładać się na początkową kontrolowaną sekwencję.
Czwarta funkcja składowa wstawia sekwencję określoną przez obiekt klasy initializer_list<Type>
.
Ostatnia funkcja składowa jest taka sama jak pierwsza, ale z odwołaniem rvalue .
N
Wstawianie elementów powoduje N
wywołania konstruktora. Reallocation występuje, ale nie iteratory ani odwołania stają się nieprawidłowe.
Jeśli podczas wstawiania jednego lub większej liczby elementów zgłaszany jest wyjątek, kontener pozostanie niezachwiany, a wyjątek zostanie ponownie dodany.
iterator
Typ, który udostępnia iterator dla listy do przodu.
typedef implementation-defined iterator;
Uwagi
iterator
opisuje obiekt, który może służyć jako iterator do przodu dla kontrolowanej sekwencji. Jest on opisany tutaj jako synonim typu zdefiniowanego przez implementację.
max_size
Zwraca maksymalną długość listy do przodu.
size_type max_size() const;
Wartość zwracana
Długość najdłuższej sekwencji, którą obiekt może kontrolować.
Uwagi
Scalanie
Łączy dwie posortowane sekwencje w jedną sekwencję posortowaną w czasie liniowym. Usuwa elementy z listy argumentów i wstawia je do tego forward_list
elementu . Dwie listy powinny być sortowane według tego samego obiektu funkcji compare przed wywołaniem metody merge
. Połączona lista zostanie posortowana według tego obiektu funkcji compare.
void merge(forward_list& right);
template <class Predicate>
void merge(forward_list& right, Predicate comp);
Parametry
Prawy
Lista przesyłania dalej do scalenia z.
Komp
Obiekt funkcji compare używany do sortowania elementów.
Uwagi
forward_list::merge
usuwa elementy z elementu forward_list
right
i wstawia je do tego forward_list
elementu . Obie sekwencje muszą być uporządkowane według tego samego predykatu, opisanego poniżej. Sekwencja połączona jest również uporządkowana przez ten obiekt funkcji compare.
W przypadku iteratorów Pi
i Pj
wyznaczania elementów w pozycjach i
i j
, pierwsza funkcja składowa nakłada kolejność !(*Pj < *Pi)
za każdym razem, gdy i < j
. (Elementy są sortowane w ascending
kolejności). Druga funkcja składowa nakłada kolejność ! comp(*Pj, *Pi)
za każdym razem, gdy i < j
.
Żadne pary elementów w oryginalnej kontrolowanej sekwencji nie są odwracane w wynikowej kontrolowanej sekwencji. Jeśli para elementów w wynikowej kontrolowanej sekwencji porównuje równe ( !(*Pi < *Pj) && !(*Pj < *Pi)
), element z oryginalnej kontrolowanej sekwencji pojawia się przed elementem z sekwencji kontrolowanej przez right
.
Wyjątek występuje tylko wtedy, gdy comp
zgłasza wyjątek. W takim przypadku kontrolowana sekwencja jest pozostawiona w nieokreślonej kolejności, a wyjątek zostanie ponownie zgłoszony.
operator =
Zamienia elementy listy do przodu na kopię innej listy do przodu.
forward_list& operator=(const forward_list& right);
forward_list& operator=(initializer_list<Type> IList);
forward_list& operator=(forward_list&& right);
Parametry
Prawy
Lista przesyłania dalej jest kopiowana do listy przesyłania dalej.
IList
Lista inicjatora ujętego w nawiasy klamrowe, która zachowuje się podobnie jak sekwencja elementów typu Type
.
Uwagi
Pierwszy operator elementu członkowskiego zastępuje kontrolowaną sekwencję kopią sekwencji kontrolowanej przez prawo.
Drugi operator składowy zastępuje kontrolowaną sekwencję z obiektu klasy initializer_list<Type>
.
Trzeci operator elementu członkowskiego jest taki sam jak pierwszy, ale z odwołaniem rvalue .
pointer
Typ, który dostarcza wskaźnik do elementu na liście do przodu.
typedef typename Allocator::pointer pointer;
pop_front
Usuwa element na początku listy do przodu.
void pop_front();
Uwagi
Pierwszy element listy do przodu musi być niepusty.
Funkcja składowa nigdy nie zgłasza wyjątku.
push_front
Dodaje element na początku listy do przodu.
void push_front(const Type& val);
void push_front(Type&& val);
Parametry
Val
Element dodany na początku listy do przodu.
Uwagi
Jeśli zostanie zgłoszony wyjątek, kontener pozostanie niezauniknięty, a wyjątek zostanie ponownie zgłoszony.
reference
Typ, który zawiera odwołanie do elementu na liście przesyłania dalej.
typedef typename Allocator::reference reference;
remove
Usuwa elementy z listy do przodu, która pasuje do określonej wartości.
void remove(const Type& val);
Parametry
Val
Wartość, która, jeśli jest przechowywana przez element, spowoduje usunięcie tego elementu z listy.
Uwagi
Funkcja składowa usuwa ze kontrolowanej sekwencji wszystkie elementy wyznaczone przez iterator P
, dla którego *P == val
.
Funkcja składowa nigdy nie zgłasza wyjątku.
remove_if
Usuwa elementy z listy do przodu, dla której jest spełniony określony predykat.
template <class Predicate>
void remove_if(Predicate pred);
Parametry
pred
Predykat jednoargumentowy, który, jeśli został spełniony przez element, powoduje usunięcie tego elementu z listy.
Uwagi
Funkcja składowa usuwa z kontrolowanej sekwencji wszystkie elementy wyznaczone przez iterator P
, dla którego pred(*P)
jest prawdziwe.
Wyjątek występuje tylko wtedy, gdy wstępnie zgłoszony jest wyjątek. W takim przypadku kontrolowana sekwencja jest pozostawiona w stanie nieokreślonym, a wyjątek zostanie ponownie zgłoszony.
zmiana rozmiaru
Określa nowy rozmiar listy do przodu.
void resize(size_type _Newsize);
void resize(size_type _Newsize, const Type& val);
Parametry
_Newsize
Liczba elementów na liście o zmienionym rozmiarze.
Val
Wartość, która ma być używana do wypełnienia.
Uwagi
Funkcje składowe zapewniają, że liczba elementów na liście jest _Newsize. Jeśli musi ona wydłużyć kontrolowaną sekwencję, pierwsza funkcja składowa dołącza elementy z wartością , podczas gdy druga funkcja składowa dołącza elementy z wartością Type()
val. Aby skrócić kontrolowaną sekwencję, oba funkcje składowe skutecznie wywołają metodę erase_after(begin() + _Newsize - 1, end())
.
reverse
Odwraca kolejność, w jakiej elementy występują na liście do przodu.
void reverse();
size_type
Typ reprezentujący niepodpisaną odległość między dwoma elementami.
typedef typename Allocator::size_type size_type;
Uwagi
Typ liczby całkowitej bez znaku opisuje obiekt, który może reprezentować długość dowolnej kontrolowanej sekwencji.
sort
Rozmieszcza elementy w kolejności rosnącej lub z kolejnością określoną przez predykat.
void sort();
template <class Predicate>
void sort(Predicate pred);
Parametry
pred
Predykat porządkowania.
Uwagi
Obie funkcje składowe porządkują elementy w kontrolowanej sekwencji przez predykat opisany poniżej.
W przypadku iteratorów Pi
i Pj
wyznaczania elementów w pozycjach i
i j
, pierwsza funkcja składowa nakłada kolejność !(*Pj < *Pi)
za każdym razem, gdy i < j
. (Elementy są sortowane w ascending
kolejności). Funkcja szablonu składowego nakłada kolejność ! pred(*Pj, *Pi)
za każdym razem, gdy i < j
. Żadne uporządkowane pary elementów w oryginalnej kontrolowanej sekwencji są odwracane w wynikowej kontrolowanej sekwencji. (Sortowanie jest stabilne).
Wyjątek występuje tylko wtedy, gdy wstępnie zgłoszony jest wyjątek. W takim przypadku kontrolowana sekwencja jest pozostawiona w nieokreślonej kolejności, a wyjątek zostanie ponownie zgłoszony.
splice_after
Usuwa elementy ze źródłowej forward_list i wstawia je do forward_list docelowej.
// insert the entire source forward_list
void splice_after(const_iterator Where, forward_list& Source);
void splice_after(const_iterator Where, forward_list&& Source);
// insert one element of the source forward_list
void splice_after(const_iterator Where, forward_list& Source, const_iterator Iter);
void splice_after(const_iterator Where, forward_list&& Source, const_iterator Iter);
// insert a range of elements from the source forward_list
void splice_after(
const_iterator Where,
forward_list& Source,
const_iterator First,
const_iterator Last);
void splice_after(
const_iterator Where,
forward_list&& Source,
const_iterator First,
const_iterator Last);
Parametry
Gdzie
Położenie w miejscu docelowym forward_list, po którym należy wstawić.
Source
Źródłowy forward_list, który ma zostać wstawiony do forward_list docelowego.
Iter
Element do wstawienia z forward_list źródłowej.
Pierwszy
Pierwszy element w zakresie, który ma zostać wstawiony z forward_list źródłowej.
Ostatni
Pierwsza pozycja poza zakresem, który ma zostać wstawiony z forward_list źródłowej.
Uwagi
Pierwsza para funkcji składowych wstawia sekwencję kontrolowaną przez źródło tuż po elemencie w kontrolowanej sekwencji wskazywanej przez Where. Usuwa również wszystkie elementy ze źródła. (&Source
nie może być równe this
.)
Druga para funkcji składowych usuwa element tuż po iterze w sekwencji kontrolowanej przez źródło i wstawia go tuż po elemencie w kontrolowanej sekwencji wskazywanej przez Where. (Jeśli Where == Iter || Where == ++Iter
nie nastąpi żadna zmiana).
Trzecia para funkcji składowych (z zakresem splice) wstawia podrange wyznaczone przez (First, Last)
sekwencję kontrolowaną przez źródło tuż po elemencie w kontrolowanej sekwencji wskazywanej przez Where. Usuwa również oryginalne rozmieszczenie z sekwencji kontrolowanej przez źródło. (Jeśli &Source == this
zakres (First, Last)
nie może zawierać elementu wskazywanego przez Where).
Jeśli splice zakresu wstawia N
elementy, a &Source != this
obiekt iteratora klas jest zwiększanyN
.
Nie iteratory, wskaźniki ani odwołania, które wyznaczają elementy spliced, stają się nieprawidłowe.
Przykład
// forward_list_splice_after.cpp
// compile with: /EHsc /W4
#include <forward_list>
#include <iostream>
using namespace std;
template <typename S> void print(const S& s) {
for (const auto& p : s) {
cout << "(" << p << ") ";
}
cout << endl;
}
int main()
{
forward_list<int> c1{ 10, 11 };
forward_list<int> c2{ 20, 21, 22 };
forward_list<int> c3{ 30, 31 };
forward_list<int> c4{ 40, 41, 42, 43 };
forward_list<int>::iterator where_iter;
forward_list<int>::iterator first_iter;
forward_list<int>::iterator last_iter;
cout << "Beginning state of lists:" << endl;
cout << "c1 = ";
print(c1);
cout << "c2 = ";
print(c2);
cout << "c3 = ";
print(c3);
cout << "c4 = ";
print(c4);
where_iter = c2.begin();
++where_iter; // start at second element
c2.splice_after(where_iter, c1);
cout << "After splicing c1 into c2:" << endl;
cout << "c1 = ";
print(c1);
cout << "c2 = ";
print(c2);
first_iter = c3.begin();
c2.splice_after(where_iter, c3, first_iter);
cout << "After splicing the first element of c3 into c2:" << endl;
cout << "c3 = ";
print(c3);
cout << "c2 = ";
print(c2);
first_iter = c4.begin();
last_iter = c4.end();
// set up to get the middle elements
++first_iter;
c2.splice_after(where_iter, c4, first_iter, last_iter);
cout << "After splicing a range of c4 into c2:" << endl;
cout << "c4 = ";
print(c4);
cout << "c2 = ";
print(c2);
}
Beginning state of lists:c1 = (10) (11)c2 = (20) (21) (22)c3 = (30) (31)c4 = (40) (41) (42) (43)After splicing c1 into c2:c1 =c2 = (20) (21) (10) (11) (22)After splicing the first element of c3 into c2:c3 = (30)c2 = (20) (21) (31) (10) (11) (22)After splicing a range of c4 into c2:c4 = (40) (41)c2 = (20) (21) (42) (43) (31) (10) (11) (22)
swap
Wymienia elementy dwóch list przesyłania dalej.
void swap(forward_list& right);
Parametry
Prawy
Lista przesyłania dalej dostarczająca elementy do wymiany.
Uwagi
Funkcja składowa zamienia kontrolowane sekwencje między *this
i po prawej stronie. Jeśli get_allocator() == right.get_allocator()
, robi to w stałym czasie, nie zgłasza żadnych wyjątków i unieważnia odwołania, wskaźniki lub iteratory, które wyznaczają elementy w dwóch kontrolowanych sekwencjach. W przeciwnym razie wykonuje przypisania elementów i konstruktor wywołuje proporcjonalnie do liczby elementów w dwóch kontrolowanych sekwencjach.
unique
Eliminuje wszystkie, ale pierwszy element z każdej kolejnej grupy równych elementów.
void unique();
template <class BinaryPredicate>
void unique(BinaryPredicate comp);
Parametry
Komp
Predykat binarny używany do porównywania kolejnych elementów.
Uwagi
Przechowuje pierwszy z każdego unikatowego elementu i usuwa resztę. Elementy muszą być sortowane tak, aby elementy o równej wartości sąsiadują z listą.
Pierwsza funkcja składowa usuwa z kontrolowanej sekwencji każdy element, który porównuje się z poprzednim elementem. W przypadku iteratorów Pi
i wyznaczania elementów w pozycjach i
i j
funkcja drugiego elementu członkowskiego usuwa każdy element, dla którego i + 1 == j && comp(*Pi, *Pj)
Pj
.
W przypadku kontrolowanej sekwencji długości N
(> 0) predykat comp(*Pi, *Pj)
jest obliczany N - 1
czas.
Wyjątek występuje tylko wtedy, gdy comp
zgłasza wyjątek. W takim przypadku kontrolowana sekwencja jest pozostawiona w stanie nieokreślonym, a wyjątek zostanie ponownie zgłoszony.
value_type
Typ reprezentujący typ elementu przechowywanego na liście do przodu.
typedef typename Allocator::value_type value_type;
Uwagi
Typ jest synonimem parametru Type
szablonu .