Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
C/C++
Vector - datový kontejner v C++
17. října 2001, 00.00 | Dnes se podíváme na šablonu třídy vector. Jedná se o datový kontejner z knihovny STL jazyka C++. Vektor je šablona jednorozměrného pole. Na rozdíl od "klasického" pole má vector, mnoho užitečných vlastností a služeb.
Dnes se podíváme na šablonu třídy vector. Jedná se o datový kontejner z knihovny STL jazyka C++. Vektor je šablona jednorozměrného pole. Na rozdíl od "klasického" pole má vector, mnoho užitečných vlastností a služeb. Lze do něj například pomocí různých metod vložit prvek, a tím zvětšit jeho velikost.
Šablona vector je datový kontejner - posloupnost. Má tedy všechny prvky, které jsem ve svém minulém článku vyjmenoval pro datové kontejnery posloupnosti. Tento kontejner je deklarován v hlavičkovém souboru vector v prostoru jmen std. Podívejme se na velice jednoduchý příklad.
|
V příkladu je vidět základní práci s vektorem. Další zajímavé metody jsou back, push_back, pop_back. Metoda back vrátí referenci na poslední prvek. Metoda push_back vloží nový prvek na konec. Ne tak, že by jím "přemazala" poslední prvek, ale zvýší velikost vektoru o 1 prvek (na konci). Metoda pop_back naopak odstraní poslední prvek, čímž sníží velikost vektoru o 1. Například:
|
Další velmi užitečné metody pro vkládání a likvidování prvků jsou insert a erase. K jejich používání musíme ale vědět něco o iterátorech, kterým se budeme věnovat příště. Zatím se tedy těmto metodám nebudeme věnovat.
Podívejme se ještě jak udělat pomocí vektoru vícerozměrné pole. Vytvoříme vlastně vektor vektorů.
|
Chtěl bych je upozornit, že podobným způsobem lze vytvořit vícerozměrné pole i z mé šablony array, kterou jsem vytvořil v článku "Pole s libovolným intervalem indexování v C++ ".
Závěrem bych chtěl ještě připomenout, že každý typ, jehož proměnné chceme vkládat do vektoru musí být schopen vytvořit svou kopii pomocí kopírovacího konstruktoru a operátoru=. Nebudou-li vyhovovat implicitní kopírovací konstruktor a operátor =, musíme je vytvořit, resp. přetížit. Vyhneme se tím zbytečným a na první pohled nepochopitelným pádům programu. Dále typ, jehož prvky budeme vkládat do vektoru musí mít k dispozici bezparametrický konstruktor. Já jsem používal ve svých příkladech typ int, nebo v posledním vector. U typu int je vše potřebné již implicitně dáno. Instance šablony vector<> je třída, která má všechny potřebné konstruktory k dispozici a operátor = je přetížen.
V příštím článku se podrobněji podíváme na iterátory. Ukážeme si také další metody šablony vector. V dalších článcích se podíváme na podle mne také důležité kontejnery. Budou to mapa a multimapa (asociativní pole).
Obsah seriálu (více o seriálu):
- Základy OOP v C++: Od C k C++
- Základní pojmy objektově orientovaného programování
- Vytváření tříd, instance třídy, zasílání zpráv v C++
- Vytváření instancí - konstruktory, destruktory
- Kopírovací konstruktor v C++
- Jednoduchá dědičnost v C++
- Časná versus pozdní vazba - úvod do polymorfismu v C++
- Polymorfismus - dokončení
- Vícenásobná dědičnost v C++
- Vícenásobná dědičnost v C++ - opakovaná dědičnost
- Vícenásobná dědičnost v C++ - volání konstruktorů a destruktorů
- Přetěžování operátorů v C++ 1.díl
- Přetěžování operátorů v C++ 2. díl
- Vstupní a výstupní operace pomocí datových proudů v C++
- Přetěžování operátorů << a >> pro datové proudy v C++
- Neformátovaný vstup a výstup v C++
- Paměťové proudy v C++
- Prostory jmen v C++
- Řetězce v C++
- Výjimky v C++
- Výjimky v C++ - výjimky tvoří dědičnou hierarchii
- Výjimky v C++ - dokončení
- Dynamická identifikace typů v C++
- Přetypování v C++
- Problémy s typy při vícenásobné dědičnosti
- Šablony funkcí v C++
- Šablony datových typů v C++
- Vnitřní typy u parametrů šablon, vnořené šablony v C++
- Pole s libovolným intervalem indexování v C++
- Datové kontejnery v C++ - Úvod do STL
- Vector - datový kontejner v C++
- Iterátory v C++
- Šablona vector v C++ a iterátory
- Asociativní pole v C++
- Množina v C++
- Funkční objekty v C++
- Standardní funkční objekty v C++
- Úvod do standardních algoritmů v C++
- Kopírovací a přesouvací algoritmy v C++
- Vyhledávací algoritmy v C++
- Skenovací (prohlížecí) algoritmy v C++
- Transformační algoritmy v C++
- Řadící algoritmy v C++
- Halda v C++
- Standardní algoritmy v C++ - dokončení
- Automatické ukazatele v C++
- Inteligentní ukazatel - čítač referencí v C++
- Použití čítače referencí v C++
- Kopírování velkých objektů v C++
- Řízené kopírování prvků v poli v C++
- Dokončení seriálu objektově orientované programování v C++
Diskuse k článku
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007