list
Třída
Třída seznamu standardní knihovny jazyka C++ je šablona třídy kontejnerů sekvence, která udržuje jejich prvky v lineárním uspořádání a umožňuje efektivní vkládání a odstraňování v libovolném umístění v rámci sekvence. Sekvence je uložena jako obousměrný propojený seznam prvků, z nichž každý obsahuje člen určitého typu Type
.
Syntaxe
template <class Type, class Allocator= allocator<Type>>
class list
Parametry
Type
Datový typ prvku, který má být uložen v seznamu.
Allocator
Typ, který představuje uložený objekt alokátoru, který zapouzdřuje podrobnosti o přidělení seznamu a uvolnění paměti. Tento argument je nepovinný a výchozí hodnota je allocator<Type>
.
Poznámky
Volba typu kontejneru by měla obecně vycházet z typu vyhledávání a vkládání vyžadovaného aplikací. Vektory by měly být upřednostňovaným kontejnerem pro správu sekvence, pokud je náhodný přístup k libovolnému prvku na úrovni Premium a vložení nebo odstranění prvků jsou vyžadovány pouze na konci sekvence. Výkon kontejneru deque třídy je vynikající, když je potřeba náhodný přístup a vložení a odstranění na začátku i na konci sekvence jsou na úrovni Premium.
Členské funkce merge
seznamu , remove
reverse
unique
a remove_if
byly optimalizovány pro operace s objekty seznamu a nabízejí vysoce výkonnou alternativu k jejich obecným protějškům.
K reallokaci seznamu dochází, když členová funkce musí vložit nebo vymazat prvky seznamu. Ve všech takových případech se zneplatní pouze iterátory nebo odkazy, které ukazují na vymazané části řízené sekvence.
Zahrňte standardní hlavičku <list>
standardní knihovny C++, která definuje container
seznam šablon tříd a několik podpůrných šablon.
Členové
Konstruktory
Název | Popis |
---|---|
list |
Vytvoří seznam určité velikosti nebo s prvky určité hodnoty nebo s určitým allocator nebo jako kopií některého jiného seznamu. |
Typedefs
Název | Popis |
---|---|
allocator_type |
Typ, který představuje allocator třídu pro objekt seznamu. |
const_iterator |
Typ, který poskytuje obousměrný iterátor, který může číst const prvek v seznamu. |
const_pointer |
Typ, který poskytuje ukazatel na const prvek v seznamu. |
const_reference |
Typ, který poskytuje odkaz na const prvek uložený v seznamu pro čtení a provádění const operací. |
const_reverse_iterator |
Typ, který poskytuje obousměrný iterátor, který může číst libovolný const prvek v seznamu. |
difference_type |
Typ, který poskytuje rozdíl mezi dvěma iterátory, které odkazují na prvky ve stejném seznamu. |
iterator |
Typ, který poskytuje obousměrný iterátor, který může číst nebo upravovat libovolný prvek v seznamu. |
pointer |
Typ, který poskytuje ukazatel na prvek v seznamu. |
reference |
Typ, který poskytuje odkaz na const prvek uložený v seznamu pro čtení a provádění const operací. |
reverse_iterator |
Typ, který poskytuje obousměrný iterátor, který může číst nebo upravovat prvek v obráceném seznamu. |
size_type |
Typ, který spočítá počet prvků v seznamu. |
value_type |
Typ, který představuje datový typ uložený v seznamu. |
Funkce
Název | Popis |
---|---|
assign |
Vymaže prvky ze seznamu a zkopíruje novou sadu prvků do cílového seznamu. |
back |
Vrátí odkaz na poslední prvek seznamu. |
begin |
Vrátí iterátor adresovaný prvním prvkem v seznamu. |
cbegin |
Vrátí konstantní iterátor adresovaný prvním prvkem v seznamu. |
cend |
Vrátí const iterátor, který řeší umístění úspěšné poslední prvek v seznamu. |
clear |
Vymaže všechny prvky seznamu. |
crbegin |
Vrátí konstantní iterátor adresovaný prvním prvkem v obráceném seznamu. |
crend |
Vrátí const iterátor, který řeší umístění úspěšné poslední prvek v obráceném seznamu. |
emplace |
Vloží prvek vytvořený na místě do seznamu na určené pozici. |
emplace_back |
Přidá prvek vytvořený na místě na konec seznamu. |
emplace_front |
Přidá prvek vytvořený na místě na začátek seznamu. |
empty |
Testuje, jestli je seznam prázdný. |
end |
Vrátí iterátor adresující umístění úspěšného posledního prvku v seznamu. |
erase |
Odebere prvek nebo rozsah prvků v seznamu ze zadaných pozic. |
front |
Vrátí odkaz na první prvek v seznamu. |
get_allocator |
Vrátí kopii objektu allocator použitého k vytvoření seznamu. |
insert |
Vloží prvek nebo počet prvků nebo rozsah prvků do seznamu na zadané pozici. |
max_size |
Vrátí maximální délku seznamu. |
merge |
Odebere prvky ze seznamu argumentů, vloží je do cílového seznamu a objedná novou sloučenou sadu prvků ve vzestupném pořadí nebo v jiném zadaném pořadí. |
pop_back |
Odstraní prvek na konci seznamu. |
pop_front |
Odstraní prvek na začátku seznamu. |
push_back |
Přidá prvek na konec seznamu. |
push_front |
Přidá prvek na začátek seznamu. |
rbegin |
Vrátí iterátor adresovaný první prvek v obráceném seznamu. |
remove |
Vymaže prvky v seznamu, které odpovídají zadané hodnotě. |
remove_if |
Vymaže prvky ze seznamu, pro který je zadaný predikát splněn. |
rend |
Vrátí iterátor, který bude adresovat umístění úspěšné poslední prvek v obráceném seznamu. |
resize |
Určuje novou velikost seznamu. |
reverse |
Vrátí pořadí, ve kterém se prvky vyskytují v seznamu. |
size |
Vrátí počet prvků v seznamu. |
sort |
Uspořádá prvky seznamu ve vzestupném pořadí nebo s ohledem na nějaký jiný vztah pořadí. |
splice |
Odebere prvky ze seznamu argumentů a vloží je do cílového seznamu. |
swap |
Vymění prvky dvou seznamů. |
unique |
Odebere sousední duplicitní prvky nebo sousední prvky, které splňují některé jiné binární predikát ze seznamu. |
Operátory
Název | Popis |
---|---|
operator= |
Nahradí prvky seznamu kopií jiného seznamu. |
Požadavky
Hlavička: <list>
allocator_type
Typ, který představuje třídu alokátoru pro objekt seznamu.
typedef Allocator allocator_type;
Poznámky
allocator_type
je synonymem parametru Allocator
šablony .
Příklad
Podívejte se na příklad pro get_allocator
.
assign
Odstraní prvky ze seznamu a zkopíruje novou sadu prvků do cílového seznamu.
void assign(
size_type Count,
const Type& Val);
void assign
initializer_list<Type> IList);
template <class InputIterator>
void assign(
InputIterator First,
InputIterator Last);
Parametry
First
Pozice prvního prvku v rozsahu prvků, které se mají zkopírovat ze seznamu argumentů.
Last
Pozice prvního prvku za rozsahem prvků, které se mají zkopírovat ze seznamu argumentů.
Count
Počet kopií prvku vloženého do seznamu.
Val
Hodnota prvku vloženého do seznamu.
IList
Objekt initializer_list obsahující prvky, které mají být vloženy.
Poznámky
Po odstranění jakýchkoli prvků v cílovém seznamu přiřaďte buď vložení zadaného rozsahu prvků z původního seznamu nebo z některého jiného seznamu do cílového seznamu, nebo vložení kopií nového prvku zadané hodnoty do cílového seznamu.
Příklad
// list_assign.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main()
{
using namespace std;
list<int> c1, c2;
list<int>::const_iterator cIter;
c1.push_back(10);
c1.push_back(20);
c1.push_back(30);
c2.push_back(40);
c2.push_back(50);
c2.push_back(60);
cout << "c1 =";
for (auto c : c1)
cout << " " << c;
cout << endl;
c1.assign(++c2.begin(), c2.end());
cout << "c1 =";
for (auto c : c1)
cout << " " << c;
cout << endl;
c1.assign(7, 4);
cout << "c1 =";
for (auto c : c1)
cout << " " << c;
cout << endl;
c1.assign({ 10, 20, 30, 40 });
cout << "c1 =";
for (auto c : c1)
cout << " " << c;
cout << endl;
}
c1 = 10 20 30c1 = 50 60c1 = 4 4 4 4 4 4 4c1 = 10 20 30 40
back
Vrátí odkaz na poslední prvek seznamu.
reference back();
const_reference back() const;
Návratová hodnota
Poslední prvek seznamu. Pokud je seznam prázdný, návratová hodnota není definována.
Poznámky
Pokud je vrácená hodnota back
přiřazena k objektu const_reference
seznamu, nelze upravit objekt seznamu. Pokud je vrácená hodnota back
přiřazena k objektu reference
seznamu, lze upravit objekt seznamu.
Při kompilaci pomocí _ITERATOR_DEBUG_LEVEL
definovaného jako 1 nebo 2 dojde k chybě za běhu, pokud se pokusíte získat přístup k prvku v prázdném seznamu. Další informace najdete v tématu Kontrola iterátorů .
Příklad
// list_back.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1;
c1.push_back( 10 );
c1.push_back( 11 );
int& i = c1.back( );
const int& ii = c1.front( );
cout << "The last integer of c1 is " << i << endl;
i--;
cout << "The next-to-last integer of c1 is " << ii << endl;
}
The last integer of c1 is 11
The next-to-last integer of c1 is 10
begin
Vrátí iterátor adresovaný prvním prvkem v seznamu.
const_iterator begin() const;
iterator begin();
Návratová hodnota
Obousměrný iterátor adresující první prvek v seznamu nebo do umístění úspěšného prázdného seznamu.
Poznámky
Pokud je vrácená hodnota begin
přiřazena k objektu const_iterator
seznamu, nelze upravit prvky v objektu seznamu. Pokud je vrácená hodnota begin
přiřazena k objektu iterator
seznamu, lze upravit prvky v objektu seznamu.
Příklad
// list_begin.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1;
list <int>::iterator c1_Iter;
list <int>::const_iterator c1_cIter;
c1.push_back( 1 );
c1.push_back( 2 );
c1_Iter = c1.begin( );
cout << "The first element of c1 is " << *c1_Iter << endl;
*c1_Iter = 20;
c1_Iter = c1.begin( );
cout << "The first element of c1 is now " << *c1_Iter << endl;
// The following line would be an error because iterator is const
// *c1_cIter = 200;
}
The first element of c1 is 1
The first element of c1 is now 20
cbegin
const
Vrátí iterátor, který řeší první prvek v oblasti.
const_iterator cbegin() const;
Návratová hodnota
const
Obousměrný iterátor s přístupem, který odkazuje na první prvek rozsahu, nebo umístění těsně za koncem prázdné oblasti (pro prázdnou oblast, cbegin() == cend()
).
Poznámky
Při návratové cbegin
hodnotě nelze upravit prvky v oblasti.
Tuto členská funkce můžete použít místo begin()
členské funkce, abyste zajistili, že návratová hodnota je const_iterator
. Obvykle se používá ve spojení s klíčovým slovem odpočtu auto
typu, jak je znázorněno v následujícím příkladu. V příkladu zvažte Container
, že je upravitelný (non- const
) kontejner jakéhokoli druhu, který podporuje begin()
a cbegin()
.
auto i1 = Container.begin();
// i1 is Container<T>::iterator
auto i2 = Container.cbegin();
// i2 is Container<T>::const_iterator
cend
const
Vrátí iterátor, který řeší umístění za posledním prvkem v rozsahu.
const_iterator cend() const;
Návratová hodnota
const
Obousměrný iterátor s přístupem, který odkazuje těsně za koncem rozsahu.
Poznámky
cend
slouží k otestování, zda iterátor předal konec jeho rozsahu.
Tuto členská funkce můžete použít místo end()
členské funkce, abyste zajistili, že návratová hodnota je const_iterator
. Obvykle se používá ve spojení s klíčovým slovem odpočtu auto
typu, jak je znázorněno v následujícím příkladu. V příkladu zvažte Container
, že je upravitelný (non- const
) kontejner jakéhokoli druhu, který podporuje end()
a cend()
.
auto i1 = Container.end();
// i1 is Container<T>::iterator
auto i2 = Container.cend();
// i2 is Container<T>::const_iterator
Hodnota vrácená cend
hodnotou by neměla být dereferenced.
jasný
Vymaže všechny prvky seznamu.
void clear();
Příklad
// list_clear.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main() {
using namespace std;
list <int> c1;
c1.push_back( 10 );
c1.push_back( 20 );
c1.push_back( 30 );
cout << "The size of the list is initially " << c1.size( ) << endl;
c1.clear( );
cout << "The size of list after clearing is " << c1.size( ) << endl;
}
The size of the list is initially 3
The size of list after clearing is 0
const_iterator
Typ, který poskytuje obousměrný iterátor, který může číst const
prvek v seznamu.
typedef implementation-defined const_iterator;
Poznámky
Typ const_iterator
nelze použít k úpravě hodnoty prvku.
Příklad
Podívejte se na příklad pro back
.
const_pointer
Poskytuje ukazatel na const
prvek v seznamu.
typedef typename Allocator::const_pointer const_pointer;
Poznámky
Typ const_pointer
nelze použít k úpravě hodnoty prvku.
Ve většině případů iterator
by se měla použít pro přístup k prvkům v objektu seznamu.
const_reference
Typ, který poskytuje odkaz na const
prvek uložený v seznamu pro čtení a provádění const
operací.
typedef typename Allocator::const_reference const_reference;
Poznámky
Typ const_reference
nelze použít k úpravě hodnoty prvku.
Příklad
// list_const_ref.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1;
c1.push_back( 10 );
c1.push_back( 20 );
const list <int> c2 = c1;
const int &i = c2.front( );
const int &j = c2.back( );
cout << "The first element is " << i << endl;
cout << "The second element is " << j << endl;
// The following line would cause an error because c2 is const
// c2.push_back( 30 );
}
The first element is 10
The second element is 20
const_reverse_iterator
Typ, který poskytuje obousměrný iterátor, který může číst libovolný const
prvek v seznamu.
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
Poznámky
Typ const_reverse_iterator
nemůže změnit hodnotu prvku a používá se k iteraci v seznamu obráceně.
Příklad
Podívejte se na příklad pro rbegin
.
crbegin
Vrátí konstantní iterátor adresovaný prvním prvkem v obráceném seznamu.
const_reverse_iterator rbegin() const;
Návratová hodnota
Konstantní obousměrný iterátor adresovaný prvním prvkem v obráceném seznamu (nebo adresování posledního prvku v nereverze list
).
Poznámky
crbegin
se používá s obráceným seznamem stejně, jako list::begin
se používá s list
.
Vrácenou hodnotou crbegin
objektu seznamu nelze změnit. list::rbegin
lze použít k iteraci seznamu zpět.
Příklad
// list_crbegin.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1;
list <int>::const_reverse_iterator c1_crIter;
c1.push_back( 10 );
c1.push_back( 20 );
c1.push_back( 30 );
c1_crIter = c1.crbegin( );
cout << "The last element in the list is " << *c1_crIter << "." << endl;
}
The last element in the list is 30.
crend
Vrátí const iterátor, který řeší umístění úspěšné poslední prvek v obráceném seznamu.
const_reverse_iterator rend() const;
Návratová hodnota
Const reverse obousměrný iterátor, který řeší umístění úspěšné poslední prvek v obráceném list
směru (umístění, které předchází prvnímu prvku v unreversed list
).
Poznámky
crend
se používá s obráceným seznamem stejně, jako list::end
se používá s list
.
S návratovou crend
hodnotou objektu list
nelze změnit.
crend
lze použít k otestování, zda reverzní iterátor dosáhl konce jeho list
.
Hodnota vrácená crend
hodnotou by neměla být dereferenced.
Příklad
// list_crend.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1;
list <int>::const_reverse_iterator c1_crIter;
c1.push_back( 10 );
c1.push_back( 20 );
c1.push_back( 30 );
c1_crIter = c1.crend( );
c1_crIter --; // Decrementing a reverse iterator moves it forward in
// the list (to point to the first element here)
cout << "The first element in the list is: " << *c1_crIter << endl;
}
The first element in the list is: 10
difference_type
Typ celého čísla se znaménkem, který lze použít k reprezentaci počtu prvků seznamu v rozsahu mezi prvky, na které odkazují iterátory.
typedef typename Allocator::difference_type difference_type;
Poznámky
Jedná se difference_type
o typ vrácený při odečtení nebo zvýšení prostřednictvím iterátorů kontejneru. Obvykle difference_type
se používá k reprezentaci počtu prvků v rozsahu [ first
, last
) mezi iterátory first
a last
, zahrnuje prvek, na který first
odkazuje, a rozsah prvků až do, ale nikoli včetně, prvek, na který last
odkazuje .
Všimněte si, že ačkoli difference_type
je k dispozici pro všechny iterátory, které splňují požadavky vstupního iterátoru, který zahrnuje třídu obousměrných iterátorů podporovaných reverzibilními kontejnery, jako je sada, odčítání mezi iterátory je podporováno pouze iterátory náhodného přístupu poskytované kontejnerem náhodného přístupu, jako vector
je třída.
Příklad
// list_diff_type.cpp
// compile with: /EHsc
#include <iostream>
#include <list>
#include <algorithm>
int main( )
{
using namespace std;
list <int> c1;
list <int>::iterator c1_Iter, c2_Iter;
c1.push_back( 30 );
c1.push_back( 20 );
c1.push_back( 30 );
c1.push_back( 10 );
c1.push_back( 30 );
c1.push_back( 20 );
c1_Iter = c1.begin( );
c2_Iter = c1.end( );
list <int>::difference_type df_typ1, df_typ2, df_typ3;
df_typ1 = count( c1_Iter, c2_Iter, 10 );
df_typ2 = count( c1_Iter, c2_Iter, 20 );
df_typ3 = count( c1_Iter, c2_Iter, 30 );
cout << "The number '10' is in c1 collection " << df_typ1 << " times.\n";
cout << "The number '20' is in c1 collection " << df_typ2 << " times.\n";
cout << "The number '30' is in c1 collection " << df_typ3 << " times.\n";
}
The number '10' is in c1 collection 1 times.
The number '20' is in c1 collection 2 times.
The number '30' is in c1 collection 3 times.
emplace
Vloží prvek vytvořený na místě do seznamu na určené pozici.
void emplace(iterator Where, Type&& val);
Parametry
Where
Pozice v cíli list
, kde je vložen první prvek.
val
Prvek přidaný na konec list
.
Poznámky
Pokud dojde k vyvolání výjimky, list
zůstane nezachovaná a výjimka se znovu zobrazí.
Příklad
// list_emplace.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
#include <string>
int main( )
{
using namespace std;
list <string> c2;
string str("a");
c2.emplace(c2.begin(), move( str ) );
cout << "Moved first element: " << c2.back( ) << endl;
}
Moved first element: a
emplace_back
Přidá prvek vytvořený na místě na konec seznamu.
void emplace_back(Type&& val);
Parametry
val
Prvek přidaný na konec list
.
Poznámky
Pokud dojde k vyvolání výjimky, list
zůstane nezachovaná a výjimka se znovu zobrazí.
Příklad
// list_emplace_back.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
#include <string>
int main( )
{
using namespace std;
list <string> c2;
string str("a");
c2.emplace_back( move( str ) );
cout << "Moved first element: " << c2.back( ) << endl;
}
Moved first element: a
emplace_front
Přidá prvek vytvořený na místě na začátek seznamu.
void emplace_front(Type&& val);
Parametry
val
Prvek přidaný na začátek list
.
Poznámky
Pokud dojde k vyvolání výjimky, list
zůstane nezachovaná a výjimka se znovu zobrazí.
Příklad
// list_emplace_front.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
#include <string>
int main( )
{
using namespace std;
list <string> c2;
string str("a");
c2.emplace_front( move( str ) );
cout << "Moved first element: " << c2.front( ) << endl;
}
Moved first element: a
empty
Testuje, jestli je seznam prázdný.
bool empty() const;
Návratová hodnota
true
je-li seznam prázdný; false
pokud seznam není prázdný.
Příklad
// list_empty.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1;
c1.push_back( 10 );
if ( c1.empty( ) )
cout << "The list is empty." << endl;
else
cout << "The list is not empty." << endl;
}
The list is not empty.
end
Vrátí iterátor adresující umístění úspěšného posledního prvku v seznamu.
const_iterator end() const;
iterator end();
Návratová hodnota
Obousměrný iterátor, který řeší umístění úspěšné poslední prvek v seznamu. Pokud je seznam prázdný, pak list::end == list::begin
.
Poznámky
end
slouží k otestování, jestli iterátor dosáhl konce seznamu.
Příklad
// list_end.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1;
list <int>::iterator c1_Iter;
c1.push_back( 10 );
c1.push_back( 20 );
c1.push_back( 30 );
c1_Iter = c1.end( );
c1_Iter--;
cout << "The last integer of c1 is " << *c1_Iter << endl;
c1_Iter--;
*c1_Iter = 400;
cout << "The new next-to-last integer of c1 is "
<< *c1_Iter << endl;
// If a const iterator had been declared instead with the line:
// list <int>::const_iterator c1_Iter;
// an error would have resulted when inserting the 400
cout << "The list is now:";
for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
cout << " " << *c1_Iter;
}
The last integer of c1 is 30
The new next-to-last integer of c1 is 400
The list is now: 10 400 30
erase
Odebere prvek nebo rozsah prvků v seznamu ze zadaných pozic.
iterator erase(iterator Where);
iterator erase(iterator first, iterator last);
Parametry
Where
Pozice prvku, který se má odebrat ze seznamu.
first
Pozice prvního prvku odebraného ze seznamu
last
Pozice těsně za posledním prvkem odebranými ze seznamu
Návratová hodnota
Obousměrný iterátor, který určuje první prvek, který zůstává nad rámec všech odebraných prvků, nebo ukazatel na konec seznamu, pokud žádný takový prvek neexistuje.
Poznámky
Nedojde k žádné relokaci, takže iterátory a odkazy se stanou neplatnými pouze pro odstraněné prvky.
erase
nikdy nevyvolá výjimku.
Příklad
// list_erase.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1;
list <int>::iterator Iter;
c1.push_back( 10 );
c1.push_back( 20 );
c1.push_back( 30 );
c1.push_back( 40 );
c1.push_back( 50 );
cout << "The initial list is:";
for ( Iter = c1.begin( ); Iter != c1.end( ); Iter++ )
cout << " " << *Iter;
cout << endl;
c1.erase( c1.begin( ) );
cout << "After erasing the first element, the list becomes:";
for ( Iter = c1.begin( ); Iter != c1.end( ); Iter++ )
cout << " " << *Iter;
cout << endl;
Iter = c1.begin( );
Iter++;
c1.erase( Iter, c1.end( ) );
cout << "After erasing all elements but the first, the list becomes: ";
for (Iter = c1.begin( ); Iter != c1.end( ); Iter++ )
cout << " " << *Iter;
cout << endl;
}
The initial list is: 10 20 30 40 50
After erasing the first element, the list becomes: 20 30 40 50
After erasing all elements but the first, the list becomes: 20
front
Vrátí odkaz na první prvek v seznamu.
reference front();
const_reference front() const;
Návratová hodnota
Pokud je seznam prázdný, návrat není definován.
Poznámky
Pokud je vrácená hodnota front
přiřazena k objektu const_reference
seznamu, nelze upravit objekt seznamu. Pokud je vrácená hodnota front
přiřazena k objektu reference
seznamu, lze upravit objekt seznamu.
Při kompilaci pomocí _ITERATOR_DEBUG_LEVEL
definovaného jako 1 nebo 2 dojde k chybě za běhu, pokud se pokusíte získat přístup k prvku v prázdném seznamu. Další informace najdete v tématu Kontrola iterátorů .
Příklad
// list_front.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main() {
using namespace std;
list <int> c1;
c1.push_back( 10 );
int& i = c1.front();
const int& ii = c1.front();
cout << "The first integer of c1 is " << i << endl;
i++;
cout << "The first integer of c1 is " << ii << endl;
}
The first integer of c1 is 10
The first integer of c1 is 11
get_allocator
Vrátí kopii objektu alokátoru použitého k vytvoření seznamu.
Allocator get_allocator() const;
Návratová hodnota
Alokátor používaný seznamem.
Poznámky
Alokátory pro třídu seznamu určují, jak třída spravuje úložiště. Výchozí alokátory dodávané s třídami kontejneru standardní knihovny C++ jsou dostatečné pro většinu programovacích potřeb. Psaní a používání vlastní třídy alokátoru je pokročilé téma jazyka C++.
Příklad
// list_get_allocator.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
// The following lines declare objects
// that use the default allocator.
list <int> c1;
list <int, allocator<int> > c2 = list <int, allocator<int> >( allocator<int>( ) );
// c3 will use the same allocator class as c1
list <int> c3( c1.get_allocator( ) );
list<int>::allocator_type xlst = c1.get_allocator( );
// You can now call functions on the allocator class used by c1
}
insert
Vloží prvek nebo počet prvků nebo rozsah prvků do seznamu na zadané pozici.
iterator insert(iterator Where, const Type& Val);
iterator insert(iterator Where, Type&& Val);
void insert(iterator Where, size_type Count, const Type& Val);
iterator insert(iterator Where, initializer_list<Type> IList);
template <class InputIterator>
void insert(iterator Where, InputIterator First, InputIterator Last);
Parametry
Where
Pozice v cílovém seznamu, kde je vložen první prvek.
Val
Hodnota prvku vloženého do seznamu.
Count
Počet prvků, které se vkládají do seznamu.
First
Pozice prvního prvku v oblasti prvků v seznamu argumentů, který se má zkopírovat.
Last
Pozice prvního prvku nad rozsah prvků v seznamu argumentů, který se má zkopírovat.
Návratová hodnota
První dvě funkce vložení vrátí iterátor, který odkazuje na pozici, kde byl nový prvek vložen do seznamu.
Příklad
// list_class_insert.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
#include <string>
int main()
{
using namespace std;
list <int> c1, c2;
list <int>::iterator Iter;
c1.push_back(10);
c1.push_back(20);
c1.push_back(30);
c2.push_back(40);
c2.push_back(50);
c2.push_back(60);
cout << "c1 =";
for (auto c : c1)
cout << " " << c;
cout << endl;
Iter = c1.begin();
Iter++;
c1.insert(Iter, 100);
cout << "c1 =";
for (auto c : c1)
cout << " " << c;
cout << endl;
Iter = c1.begin();
Iter++;
Iter++;
c1.insert(Iter, 2, 200);
cout << "c1 =";
for(auto c : c1)
cout << " " << c;
cout << endl;
c1.insert(++c1.begin(), c2.begin(), --c2.end());
cout << "c1 =";
for (auto c : c1)
cout << " " << c;
cout << endl;
// initialize a list of strings by moving
list < string > c3;
string str("a");
c3.insert(c3.begin(), move(str));
cout << "Moved first element: " << c3.front() << endl;
// Assign with an initializer_list
list <int> c4{ {1, 2, 3, 4} };
c4.insert(c4.begin(), { 5, 6, 7, 8 });
cout << "c4 =";
for (auto c : c4)
cout << " " << c;
cout << endl;
}
iterator
Typ, který poskytuje obousměrný iterátor, který může číst nebo upravovat libovolný prvek v seznamu.
typedef implementation-defined iterator;
Poznámky
Typ iterator
lze použít k úpravě hodnoty elementu.
Příklad
Podívejte se na příklad pro begin
.
list
Vytvoří seznam určité velikosti nebo s prvky určité hodnoty nebo s určitým alokátorem nebo jako kopii celého nebo části některého jiného seznamu.
list();
explicit list(const Allocator& Al);
explicit list(size_type Count);
list(size_type Count, const Type& Val);
list(size_type Count, const Type& Val, const Allocator& Al);
list(const list& Right);
list(list&& Right);
list(initializer_list<Type> IList, const Allocator& Al);
template <class InputIterator>
list(InputIterator First, InputIterator Last);
template <class InputIterator>
list(InputIterator First, InputIterator Last, const Allocator& Al);
Parametry
Al
Třída alokátoru, která se má použít s tímto objektem.
Count
Počet prvků v seznamu vytvořených.
Val
Hodnota prvků v seznamu.
Right
Seznam, ze kterého má být vytvořený seznam kopií.
First
Pozice prvního prvku v oblasti prvků, které se mají zkopírovat.
Last
Pozice prvního prvku nad rozsah prvků, které se mají zkopírovat.
IList
Initializer_list obsahující prvky, které se mají zkopírovat.
Poznámky
Všechny konstruktory ukládají objekt alokátoru (Al
) a inicializují seznam.
get_allocator
vrátí kopii objektu alokátoru použitého k vytvoření seznamu.
První dva konstruktory určují prázdný počáteční seznam, druhý určující typ alokátoru (Al
), který se má použít.
Třetí konstruktor určuje opakování zadaného počtu (Count
) prvků výchozí hodnoty pro třídu Type
.
Čtvrtý a pátý konstruktor určuje opakování (Count
) prvků hodnoty Val
.
Šestý konstruktor určuje kopii seznamu Right
.
Sedmý konstruktor přesune seznam Right
.
Osmý konstruktor používá k určení prvků objekt initializer_list.
Další dva konstruktory zkopírují rozsah [First, Last)
seznamu.
Žádná z konstruktorů neprovede žádné dočasné relokace.
Příklad
// list_class_list.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main()
{
using namespace std;
// Create an empty list c0
list <int> c0;
// Create a list c1 with 3 elements of default value 0
list <int> c1(3);
// Create a list c2 with 5 elements of value 2
list <int> c2(5, 2);
// Create a list c3 with 3 elements of value 1 and with the
// allocator of list c2
list <int> c3(3, 1, c2.get_allocator());
// Create a copy, list c4, of list c2
list <int> c4(c2);
// Create a list c5 by copying the range c4[ first, last)
list <int>::iterator c4_Iter = c4.begin();
c4_Iter++;
c4_Iter++;
list <int> c5(c4.begin(), c4_Iter);
// Create a list c6 by copying the range c4[ first, last) and with
// the allocator of list c2
c4_Iter = c4.begin();
c4_Iter++;
c4_Iter++;
c4_Iter++;
list <int> c6(c4.begin(), c4_Iter, c2.get_allocator());
cout << "c1 =";
for (auto c : c1)
cout << " " << c;
cout << endl;
cout << "c2 =";
for (auto c : c2)
cout << " " << c;
cout << endl;
cout << "c3 =";
for (auto c : c3)
cout << " " << c;
cout << endl;
cout << "c4 =";
for (auto c : c4)
cout << " " << c;
cout << endl;
cout << "c5 =";
for (auto c : c5)
cout << " " << c;
cout << endl;
cout << "c6 =";
for (auto c : c6)
cout << " " << c;
cout << endl;
// Move list c6 to list c7
list <int> c7(move(c6));
cout << "c7 =";
for (auto c : c7)
cout << " " << c;
cout << endl;
// Construct with initializer_list
list<int> c8({ 1, 2, 3, 4 });
cout << "c8 =";
for (auto c : c8)
cout << " " << c;
cout << endl;
}
c1 = 0 0 0c2 = 2 2 2 2 2c3 = 1 1 1c4 = 2 2 2 2 2c5 = 2 2c6 = 2 2 2c7 = 2 2 2c8 = 1 2 3 4
max_size
Vrátí maximální délku seznamu.
size_type max_size() const;
Návratová hodnota
Maximální možná délka seznamu.
Příklad
// list_max_size.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1;
list <int>::size_type i;
i = c1.max_size( );
cout << "Maximum possible length of the list is " << i << "." << endl;
}
merge
Odebere prvky ze seznamu argumentů, vloží je do cílového seznamu a objedná novou sloučenou sadu prvků ve vzestupném pořadí nebo v jiném zadaném pořadí.
void merge(list<Type, Allocator>& right);
template <class Traits>
void merge(list<Type, Allocator>& right, Traits comp);
Parametry
right
Seznam argumentů, který se má sloučit s cílovým seznamem.
comp
Relační operátor použitý k seřazení prvků cílového seznamu.
Poznámky
Seznam right
argumentů se sloučí s cílovým seznamem.
Argumenty i cílové seznamy musí být seřazeny se stejným relačním vztahem, podle kterého má být výsledná sekvence seřazena. Výchozí pořadí první členské funkce je vzestupné. Druhá členová funkce ukládá operaci comp
Traits
porovnání třídy zadanou uživatelem .
Příklad
// list_merge.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1, c2, c3;
list <int>::iterator c1_Iter, c2_Iter, c3_Iter;
c1.push_back( 3 );
c1.push_back( 6 );
c2.push_back( 2 );
c2.push_back( 4 );
c3.push_back( 5 );
c3.push_back( 1 );
cout << "c1 =";
for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
cout << " " << *c1_Iter;
cout << endl;
cout << "c2 =";
for ( c2_Iter = c2.begin( ); c2_Iter != c2.end( ); c2_Iter++ )
cout << " " << *c2_Iter;
cout << endl;
c2.merge( c1 ); // Merge c1 into c2 in (default) ascending order
c2.sort( greater<int>( ) );
cout << "After merging c1 with c2 and sorting with >: c2 =";
for ( c2_Iter = c2.begin( ); c2_Iter != c2.end( ); c2_Iter++ )
cout << " " << *c2_Iter;
cout << endl;
cout << "c3 =";
for ( c3_Iter = c3.begin( ); c3_Iter != c3.end( ); c3_Iter++ )
cout << " " << *c3_Iter;
cout << endl;
c2.merge( c3, greater<int>( ) );
cout << "After merging c3 with c2 according to the '>' comparison relation: c2 =";
for ( c2_Iter = c2.begin( ); c2_Iter != c2.end( ); c2_Iter++ )
cout << " " << *c2_Iter;
cout << endl;
}
c1 = 3 6
c2 = 2 4
After merging c1 with c2 and sorting with >: c2 = 6 4 3 2
c3 = 5 1
After merging c3 with c2 according to the '>' comparison relation: c2 = 6 5 4 3 2 1
operator=
Nahradí prvky seznamu kopií jiného seznamu.
list& operator=(const list& right);
list& operator=(list&& right);
Parametry
right
Zkopírovaná list
do souboru list
.
Poznámky
Po vymazání všech existujících prvků v operátor list
buď zkopíruje nebo přesune obsah right
do list
.
Příklad
// list_operator_as.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list<int> v1, v2, v3;
list<int>::iterator iter;
v1.push_back(10);
v1.push_back(20);
v1.push_back(30);
v1.push_back(40);
v1.push_back(50);
cout << "v1 = " ;
for (iter = v1.begin(); iter != v1.end(); iter++)
cout << *iter << " ";
cout << endl;
v2 = v1;
cout << "v2 = ";
for (iter = v2.begin(); iter != v2.end(); iter++)
cout << *iter << " ";
cout << endl;
// move v1 into v2
v2.clear();
v2 = forward< list<int> >(v1);
cout << "v2 = ";
for (iter = v2.begin(); iter != v2.end(); iter++)
cout << *iter << " ";
cout << endl;
}
pointer
Poskytuje ukazatel na prvek v seznamu.
typedef typename Allocator::pointer pointer;
Poznámky
Typ pointer
lze použít k úpravě hodnoty elementu.
Ve většině případů iterator
by se měla použít pro přístup k prvkům v objektu seznamu.
pop_back
Odstraní prvek na konci seznamu.
void pop_back();
Poznámky
Poslední prvek nesmí být prázdný. pop_back
nikdy nevyvolá výjimku.
Příklad
// list_pop_back.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1;
c1.push_back( 1 );
c1.push_back( 2 );
cout << "The first element is: " << c1.front( ) << endl;
cout << "The last element is: " << c1.back( ) << endl;
c1.pop_back( );
cout << "After deleting the element at the end of the list, "
"the last element is: " << c1.back( ) << endl;
}
The first element is: 1
The last element is: 2
After deleting the element at the end of the list, the last element is: 1
pop_front
Odstraní prvek na začátku seznamu.
void pop_front();
Poznámky
První prvek nesmí být prázdný. pop_front
nikdy nevyvolá výjimku.
Příklad
// list_pop_front.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1;
c1.push_back( 1 );
c1.push_back( 2 );
cout << "The first element is: " << c1.front( ) << endl;
cout << "The second element is: " << c1.back( ) << endl;
c1.pop_front( );
cout << "After deleting the element at the beginning of the list, "
"the first element is: " << c1.front( ) << endl;
}
The first element is: 1
The second element is: 2
After deleting the element at the beginning of the list, the first element is: 2
push_back
Přidá prvek na konec seznamu.
void push_back(const Type& val);
void push_back(Type&& val);
Parametry
val
Prvek přidaný na konec seznamu.
Poznámky
Pokud dojde k vyvolání výjimky, seznam zůstane nezachovaný a výjimka se znovu zobrazí.
Příklad
// list_push_back.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
#include <string>
int main( )
{
using namespace std;
list <int> c1;
c1.push_back( 1 );
if ( c1.size( ) != 0 )
cout << "Last element: " << c1.back( ) << endl;
c1.push_back( 2 );
if ( c1.size( ) != 0 )
cout << "New last element: " << c1.back( ) << endl;
// move initialize a list of strings
list <string> c2;
string str("a");
c2.push_back( move( str ) );
cout << "Moved first element: " << c2.back( ) << endl;
}
Last element: 1
New last element: 2
Moved first element: a
push_front
Přidá prvek na začátek seznamu.
void push_front(const Type& val);
void push_front(Type&& val);
Parametry
val
Prvek přidaný na začátek seznamu.
Poznámky
Pokud dojde k vyvolání výjimky, seznam zůstane nezachovaný a výjimka se znovu zobrazí.
Příklad
// list_push_front.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
#include <string>
int main( )
{
using namespace std;
list <int> c1;
c1.push_front( 1 );
if ( c1.size( ) != 0 )
cout << "First element: " << c1.front( ) << endl;
c1.push_front( 2 );
if ( c1.size( ) != 0 )
cout << "New first element: " << c1.front( ) << endl;
// move initialize a list of strings
list <string> c2;
string str("a");
c2.push_front( move( str ) );
cout << "Moved first element: " << c2.front( ) << endl;
}
First element: 1
New first element: 2
Moved first element: a
rbegin
Vrátí iterátor, který řeší první prvek v obráceném seznamu.
const_reverse_iterator rbegin() const;
reverse_iterator rbegin();
Návratová hodnota
Reverzní obousměrný iterátor adresovaný prvním prvkem v obráceném seznamu (nebo adresování posledního prvku v nereverzním seznamu).
Poznámky
rbegin
se používá s obráceným seznamem stejně, jako begin
se používá se seznamem.
Pokud je vrácená hodnota rbegin
přiřazena k objektu const_reverse_iterator
seznamu, nelze upravit objekt seznamu. Pokud je vrácená hodnota rbegin
přiřazena k objektu reverse_iterator
seznamu, lze upravit objekt seznamu.
rbegin
lze použít k iteraci seznamu zpět.
Příklad
// list_rbegin.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1;
list <int>::iterator c1_Iter;
list <int>::reverse_iterator c1_rIter;
// If the following line replaced the line above, *c1_rIter = 40;
// (below) would be an error
//list <int>::const_reverse_iterator c1_rIter;
c1.push_back( 10 );
c1.push_back( 20 );
c1.push_back( 30 );
c1_rIter = c1.rbegin( );
cout << "The last element in the list is " << *c1_rIter << "." << endl;
cout << "The list is:";
for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
cout << " " << *c1_Iter;
cout << endl;
// rbegin can be used to start an iteration through a list in
// reverse order
cout << "The reversed list is:";
for ( c1_rIter = c1.rbegin( ); c1_rIter != c1.rend( ); c1_rIter++ )
cout << " " << *c1_rIter;
cout << endl;
c1_rIter = c1.rbegin( );
*c1_rIter = 40;
cout << "The last element in the list is now " << *c1_rIter << "." << endl;
}
The last element in the list is 30.
The list is: 10 20 30
The reversed list is: 30 20 10
The last element in the list is now 40.
reference
Typ, který poskytuje odkaz na prvek uložený v seznamu.
typedef typename Allocator::reference reference;
Příklad
// list_ref.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1;
c1.push_back( 10 );
c1.push_back( 20 );
int &i = c1.front( );
int &j = c1.back( );
cout << "The first element is " << i << endl;
cout << "The second element is " << j << endl;
}
The first element is 10
The second element is 20
remove
Vymaže prvky v seznamu, které odpovídají zadané hodnotě.
void remove(const Type& val);
Parametry
val
Hodnota, která je uložena elementem, způsobí odebrání tohoto prvku ze seznamu.
Poznámky
Pořadí zbývajících prvků není ovlivněno.
Příklad
// list_remove.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1;
list <int>::iterator c1_Iter, c2_Iter;
c1.push_back( 5 );
c1.push_back( 100 );
c1.push_back( 5 );
c1.push_back( 200 );
c1.push_back( 5 );
c1.push_back( 300 );
cout << "The initial list is c1 =";
for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
cout << " " << *c1_Iter;
cout << endl;
list <int> c2 = c1;
c2.remove( 5 );
cout << "After removing elements with value 5, the list becomes c2 =";
for ( c2_Iter = c2.begin( ); c2_Iter != c2.end( ); c2_Iter++ )
cout << " " << *c2_Iter;
cout << endl;
}
The initial list is c1 = 5 100 5 200 5 300
After removing elements with value 5, the list becomes c2 = 100 200 300
remove_if
Vymaže prvky ze seznamu, pro který je zadaný predikát splněn.
template <class Predicate>
void remove_if(Predicate pred)
Parametry
pred
Unární predikát, který, pokud je splněn prvkem, vede k odstranění tohoto prvku ze seznamu.
Příklad
// list_remove_if.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
template <class T> class is_odd : public std::unary_function<T, bool>
{
public:
bool operator( ) ( T& val )
{
return ( val % 2 ) == 1;
}
};
int main( )
{
using namespace std;
list <int> c1;
list <int>::iterator c1_Iter, c2_Iter;
c1.push_back( 3 );
c1.push_back( 4 );
c1.push_back( 5 );
c1.push_back( 6 );
c1.push_back( 7 );
c1.push_back( 8 );
cout << "The initial list is c1 =";
for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
cout << " " << *c1_Iter;
cout << endl;
list <int> c2 = c1;
c2.remove_if( is_odd<int>( ) );
cout << "After removing the odd elements, "
<< "the list becomes c2 =";
for ( c2_Iter = c2.begin( ); c2_Iter != c2.end( ); c2_Iter++ )
cout << " " << *c2_Iter;
cout << endl;
}
The initial list is c1 = 3 4 5 6 7 8
After removing the odd elements, the list becomes c2 = 4 6 8
rend
Vrátí iterátor adresovaný umístění, které následuje za posledním prvkem v obráceném seznamu.
const_reverse_iterator rend() const;
reverse_iterator rend();
Návratová hodnota
Reverzní obousměrný iterátor, který řeší umístění úspěšné poslední prvek v obráceném seznamu (umístění, které předchází prvnímu prvku v nereverzním seznamu).
Poznámky
rend
se používá s obráceným seznamem stejně, jako end
se používá se seznamem.
Pokud je vrácená hodnota rend
přiřazena k objektu const_reverse_iterator
seznamu, nelze upravit objekt seznamu. Pokud je vrácená hodnota rend
přiřazena k objektu reverse_iterator
seznamu, lze upravit objekt seznamu.
rend
lze použít k otestování, zda reverzní iterátor dosáhl konce seznamu.
Hodnota vrácená rend
hodnotou by neměla být dereferenced.
Příklad
// list_rend.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1;
list <int>::iterator c1_Iter;
list <int>::reverse_iterator c1_rIter;
// If the following line had replaced the line above, an error would
// have resulted in the line modifying an element (commented below)
// because the iterator would have been const
// list <int>::const_reverse_iterator c1_rIter;
c1.push_back( 10 );
c1.push_back( 20 );
c1.push_back( 30 );
c1_rIter = c1.rend( );
c1_rIter --; // Decrementing a reverse iterator moves it forward in
// the list (to point to the first element here)
cout << "The first element in the list is: " << *c1_rIter << endl;
cout << "The list is:";
for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
cout << " " << *c1_Iter;
cout << endl;
// rend can be used to test if an iteration is through all of the
// elements of a reversed list
cout << "The reversed list is:";
for ( c1_rIter = c1.rbegin( ); c1_rIter != c1.rend( ); c1_rIter++ )
cout << " " << *c1_rIter;
cout << endl;
c1_rIter = c1.rend( );
c1_rIter--; // Decrementing the reverse iterator moves it backward
// in the reversed list (to the last element here)
*c1_rIter = 40; // This modification of the last element would have
// caused an error if a const_reverse iterator had
// been declared (as noted above)
cout << "The modified reversed list is:";
for ( c1_rIter = c1.rbegin( ); c1_rIter != c1.rend( ); c1_rIter++ )
cout << " " << *c1_rIter;
cout << endl;
}
The first element in the list is: 10
The list is: 10 20 30
The reversed list is: 30 20 10
The modified reversed list is: 30 20 40
resize
Určuje novou velikost seznamu.
void resize(size_type _Newsize);
void resize(size_type _Newsize, Type val);
Parametry
_Newsize
Nová velikost seznamu.
val
Hodnota nových prvků, které se mají přidat do seznamu, pokud je nová velikost větší než původní velikost. Pokud je hodnota vynechána, nové prvky jsou přiřazeny výchozí hodnotu pro třídu.
Poznámky
Pokud je velikost seznamu menší než požadovaná velikost, přidají se do seznamu prvky, _Newsize
dokud nedosáhne požadované velikosti.
Pokud je velikost seznamu větší než požadovaná velikost, odstraní se prvky nejblíže ke konci seznamu, dokud seznam nedosáhne velikosti _Newsize
.
Pokud je aktuální velikost seznamu stejná jako požadovaná velikost, neprovádí se žádná akce.
size
zobrazuje aktuální velikost seznamu.
Příklad
// list_resize.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1;
c1.push_back( 10 );
c1.push_back( 20 );
c1.push_back( 30 );
c1.resize( 4,40 );
cout << "The size of c1 is " << c1.size( ) << endl;
cout << "The value of the last element is " << c1.back( ) << endl;
c1.resize( 5 );
cout << "The size of c1 is now " << c1.size( ) << endl;
cout << "The value of the last element is now " << c1.back( ) << endl;
c1.resize( 2 );
cout << "The reduced size of c1 is: " << c1.size( ) << endl;
cout << "The value of the last element is now " << c1.back( ) << endl;
}
The size of c1 is 4
The value of the last element is 40
The size of c1 is now 5
The value of the last element is now 0
The reduced size of c1 is: 2
The value of the last element is now 20
reverse
Vrátí pořadí, ve kterém se prvky vyskytují v seznamu.
void reverse();
Příklad
// list_reverse.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1;
list <int>::iterator c1_Iter;
c1.push_back( 10 );
c1.push_back( 20 );
c1.push_back( 30 );
cout << "c1 =";
for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
cout << " " << *c1_Iter;
cout << endl;
c1.reverse( );
cout << "Reversed c1 =";
for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
cout << " " << *c1_Iter;
cout << endl;
}
c1 = 10 20 30
Reversed c1 = 30 20 10
reverse_iterator
Typ, který poskytuje obousměrný iterátor, který může číst nebo upravovat prvek v obráceném seznamu.
typedef std::reverse_iterator<iterator> reverse_iterator;
Poznámky
Typ reverse_iterator
se používá k iteraci v seznamu obráceně.
Příklad
Podívejte se na příklad pro rbegin
.
size
Vrátí počet prvků v seznamu.
size_type size() const;
Návratová hodnota
Aktuální délka seznamu.
Příklad
// list_size.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1;
list <int>::size_type i;
c1.push_back( 5 );
i = c1.size( );
cout << "List length is " << i << "." << endl;
c1.push_back( 7 );
i = c1.size( );
cout << "List length is now " << i << "." << endl;
}
List length is 1.
List length is now 2.
size_type
Typ, který spočítá počet prvků v seznamu.
typedef typename Allocator::size_type size_type;
Příklad
Podívejte se na příklad pro size
.
sort
Uspořádá prvky seznamu ve vzestupném pořadí nebo s ohledem na jiné pořadí zadané uživatelem.
void sort();
template <class Traits>
void sort(Traits comp);
Parametry
comp
Relační operátor použitý k seřazení po sobě jdoucích prvků.
Poznámky
První člen funkce ve výchozím nastavení umístí prvky ve vzestupném pořadí.
Funkce členské šablony objednává prvky podle uživatelem zadané porovnávací operace comp
třídy Traits
.
Příklad
// list_sort.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1;
list <int>::iterator c1_Iter;
c1.push_back( 20 );
c1.push_back( 10 );
c1.push_back( 30 );
cout << "Before sorting: c1 =";
for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
cout << " " << *c1_Iter;
cout << endl;
c1.sort( );
cout << "After sorting c1 =";
for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
cout << " " << *c1_Iter;
cout << endl;
c1.sort( greater<int>( ) );
cout << "After sorting with 'greater than' operation, c1 =";
for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
cout << " " << *c1_Iter;
cout << endl;
}
Before sorting: c1 = 20 10 30
After sorting c1 = 10 20 30
After sorting with 'greater than' operation, c1 = 30 20 10
splice
Odebere prvky ze zdrojového seznamu a vloží je do cílového seznamu.
// insert the entire source list
void splice(const_iterator Where, list<Type, Allocator>& Source);
void splice(const_iterator Where, list<Type, Allocator>&& Source);
// insert one element of the source list
void splice(const_iterator Where, list<Type, Allocator>& Source, const_iterator Iter);
void splice(const_iterator Where, list<Type, Allocator>&& Source, const_iterator Iter);
// insert a range of elements from the source list
void splice(const_iterator Where, list<Type, Allocator>& Source, const_iterator First, const_iterator Last);
void splice(const_iterator Where, list<Type, Allocator>&& Source, const_iterator First, const_iterator Last);
Parametry
Where
Pozice v cílovém seznamu, před kterou chcete vložit.
Source
Zdrojový seznam, který se má vložit do cílového seznamu.
Iter
Prvek, který se má vložit ze zdrojového seznamu.
First
První prvek v oblasti, která se má vložit ze zdrojového seznamu.
Last
První pozice za posledním prvkem v oblasti, která se má vložit ze zdrojového seznamu.
Poznámky
První dvojice členských funkcí vloží všechny prvky ze zdrojového seznamu do cílového seznamu před pozici, na kterou Where
odkazuje, a odebere všechny prvky ze zdrojového seznamu. (&Source
nesmí být rovno this
.)
Druhá dvojice členských funkcí vloží prvek odkazovaný Iter
před pozici v cílovém seznamu, na který Where
odkazuje, a odebere Iter ze zdrojového seznamu. (Pokud Where == Iter || Where == ++Iter
nedojde k žádné změně.)
Třetí dvojice členských funkcí vloží oblast určenou [ First
, Last
) před prvek v cílovém seznamu, na který Where
odkazuje, a odebere tento rozsah prvků ze zdrojového seznamu. (Pokud &Source == this
oblast [First, Last)
nesmí obsahovat prvek, na který Where
odkazuje .)
Pokud rozsah splice vloží N
prvky, a &Source != this
, objekt třídy iterator
se zvýší N
časy.
Ve všech případech zůstávají iterátory, ukazatele nebo odkazy odkazující na duplicitní prvky platné a přenesou se do cílového kontejneru.
Příklad
// list_splice.cpp
// compile with: /EHsc /W4
#include <list>
#include <iostream>
using namespace std;
template <typename S> void print(const S& s) {
cout << s.size() << " elements: ";
for (const auto& p : s) {
cout << "(" << p << ") ";
}
cout << endl;
}
int main()
{
list<int> c1{10,11};
list<int> c2{20,21,22};
list<int> c3{30,31};
list<int> c4{40,41,42,43};
list<int>::iterator where_iter;
list<int>::iterator first_iter;
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(where_iter, c1);
cout << "After splicing c1 into c2:" << endl;
cout << "c1 = ";
print(c1);
cout << "c2 = ";
print(c2);
first_iter = c3.begin();
c2.splice(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;
--last_iter;
c2.splice(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 = 2 elements: (10) (11)c2 = 3 elements: (20) (21) (22)c3 = 2 elements: (30) (31)c4 = 4 elements: (40) (41) (42) (43)After splicing c1 into c2:c1 = 0 elements:c2 = 5 elements: (20) (10) (11) (21) (22)After splicing the first element of c3 into c2:c3 = 1 elements: (31)c2 = 6 elements: (20) (10) (11) (30) (21) (22)After splicing a range of c4 into c2:c4 = 2 elements: (40) (43)c2 = 8 elements: (20) (10) (11) (30) (41) (42) (21) (22)
swap
Vymění prvky dvou seznamů.
void swap(list<Type, Allocator>& right);
friend void swap(list<Type, Allocator>& left, list<Type, Allocator>& right)
Parametry
right
Seznam poskytující prvky, které mají být prohozeny, nebo seznam, jehož prvky mají být vyměňovány s prvky seznamu left
.
left
Seznam, jehož prvky mají být vyměňovány s prvky seznamu right
.
Příklad
// list_swap.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1, c2, c3;
list <int>::iterator c1_Iter;
c1.push_back( 1 );
c1.push_back( 2 );
c1.push_back( 3 );
c2.push_back( 10 );
c2.push_back( 20 );
c3.push_back( 100 );
cout << "The original list c1 is:";
for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
cout << " " << *c1_Iter;
cout << endl;
c1.swap( c2 );
cout << "After swapping with c2, list c1 is:";
for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
cout << " " << *c1_Iter;
cout << endl;
swap( c1,c3 );
cout << "After swapping with c3, list c1 is:";
for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
cout << " " << *c1_Iter;
cout << endl;
}
The original list c1 is: 1 2 3
After swapping with c2, list c1 is: 10 20
After swapping with c3, list c1 is: 100
unique
Odebere sousední duplicitní prvky nebo sousední prvky, které splňují některé jiné binární predikáty ze seznamu.
void unique();
template <class BinaryPredicate>
void unique(BinaryPredicate pred);
Parametry
pred
Binární predikát použitý k porovnání po sobě jdoucích prvků.
Poznámky
Tato funkce předpokládá, že seznam je seřazený tak, aby všechny duplicitní prvky sousedily. Duplicitní položky, které nejsou vedle sebe, nebudou odstraněny.
První člen funkce odebere každý prvek, který porovnává stejné s předchozím prvkem.
Druhá členská funkce odebere všechny prvky, které splňují predikát funkce pred
ve srovnání s předchozím prvkem. Pro argument pred
můžete použít kterýkoli z objektů binární funkce deklarovaných v <functional>
záhlaví nebo můžete vytvořit vlastní.
Příklad
// list_unique.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1;
list <int>::iterator c1_Iter, c2_Iter,c3_Iter;
not_equal_to<int> mypred;
c1.push_back( -10 );
c1.push_back( 10 );
c1.push_back( 10 );
c1.push_back( 20 );
c1.push_back( 20 );
c1.push_back( -10 );
cout << "The initial list is c1 =";
for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
cout << " " << *c1_Iter;
cout << endl;
list <int> c2 = c1;
c2.unique( );
cout << "After removing successive duplicate elements, c2 =";
for ( c2_Iter = c2.begin( ); c2_Iter != c2.end( ); c2_Iter++ )
cout << " " << *c2_Iter;
cout << endl;
list <int> c3 = c2;
c3.unique( mypred );
cout << "After removing successive unequal elements, c3 =";
for ( c3_Iter = c3.begin( ); c3_Iter != c3.end( ); c3_Iter++ )
cout << " " << *c3_Iter;
cout << endl;
}
The initial list is c1 = -10 10 10 20 20 -10
After removing successive duplicate elements, c2 = -10 10 20 -10
After removing successive unequal elements, c3 = -10 -10
value_type
Typ, který představuje datový typ uložený v seznamu.
typedef typename Allocator::value_type value_type;
Poznámky
value_type
je synonymem parametru Type
šablony .
Příklad
// list_value_type.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list<int>::value_type AnInt;
AnInt = 44;
cout << AnInt << endl;
}
44