Udostępnij za pośrednictwem


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 cbeginelementu 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_listelementu . 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 righti wstawia je do tego forward_listelementu . 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 == ++Iternie 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 == thiszakres (First, Last) nie może zawierać elementu wskazywanego przez Where).

Jeśli splice zakresu wstawia N elementy, a &Source != thisobiekt 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 jfunkcja 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 Typeszablonu .