Vector datový kontejner v C++.



Podobné dokumenty
Šablony, kontejnery a iterátory

map, multimap - Asociativní pole v C++.

Iterátory v C++. int pole[20]; for (int *temp = pole, temp!= &pole[20]; temp++) { *temp = 0;

Funkční objekty v C++.

Šablony, kontejnery a iterátory

Množina v C++ (set, multiset).

Standardní algoritmy vyhledávací.

Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++

Standardní algoritmy v C++.

Množina čísel int stl-set-int.cpp

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Více o konstruktorech a destruktorech

C++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++

Mělká a hluboká kopie

Programování v C++ 3, 3. cvičení

PB161 Programování v jazyce C++ Přednáška 3

C++ přetěžování funkcí a operátorů. Jan Hnilica Počítačové modelování 19

Konstruktory a destruktory

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Šablony funkcí a tříd (Templates) Genericita

for (int i = 0; i < sizeof(hodnoty) / sizeof(int); i++) { cout<<hodonoty[i]<< endl; } cin.get(); return 0; }

PB161 Programování v jazyce C++ Přednáška 10

Programování v C++ 1, 1. cvičení

Programování v C++ 1, 5. cvičení

PB161 Programování v jazyce C++ Přednáška 3

Abstraktní třídy, polymorfní struktury

přetížení operátorů (o)

<surface name="pozadi" file="obrazky/pozadi/pozadi.png"/> ****************************************************************************

Úvod do programování. Lekce 1

C++ objektově orientovaná nadstavba programovacího jazyka C

přetížení operátorů (o)

Hornerovo schéma. je algoritmus výpočtu hodnoty polynomu P(x) v bodě x 0. eliminuje výpočet i-té mocniny převodem na postupné násobení.

Kolekce ArrayList. Deklarace proměnných. Import. Vytvoření prázdné kolekce. napsal Pajclín

Programování v C++ 1, 6. cvičení

PB161 Programování v jazyku C++

PROGRAMOVÁNÍ V C++ CVIČENÍ

Základy C++ I. Jan Hnilica Počítačové modelování 18

Jazyk C++ II. STL knihovna kontejnery část 2

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

Jazyk C++ II. STL knihovna kontejnery část 1

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

Moderní programování objektových aplikací v C++ (ESF)

Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole

Pokročilé programování v jazyce C pro chemiky (C3220) Vstup a výstup v C++

Prostory jmen. #include<iostream.h> namespace RadimuvProstor { int secti(int a, int b); class Trida { private: int Atribut; public: void metoda();

PB161 Programování v jazyce C++ Přednáška 1

PB161 Programování v jazyce C++ Přednáška 1

Dynamická identifikace typů v C++.

PB161 Programování v jazyce C++ Přednáška 10

Syntaxe vyjímek. #include <iostream> #include <string> using namespace std; // Trida vyjimek class Vyjimka { private:

Ukazatele, dynamická alokace

Úvod do programovacích jazyků (Java)

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

Ukazatele a pole. Chceme-li vyplnit celé pole nulami, použijeme prázdný inicializátor: 207 Čárka na konci seznamu inicializátorů

Preprocesor. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016

Zpracoval:

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

PB161 Programování v jazyce C++ Přednáška 9

Programování v C++, 2. cvičení

Základy programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: Předmět: ZAP

PB161 Programování v jazyce C++ Přednáška 8

Prostory jmen. při vkládání několika hlavičkových souborů může vzniknout kolize. logika.h const int x=5; typedef struct {...

Řetězce. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016

Vstupní a vstupní proudy v C++

Úvod do programování - Java. Cvičení č.4

Abstraktní datové typy

Programování v C++ 1, 17. cvičení

Programování v C++ 1, 14. cvičení

Programování v jazyce C a C++

PB přednáška (23. listopadu 2015)

Hotelová škola, Obchodní akademie a Střední průmyslová škola Teplice,Benešovo náměstí 1, příspěvková organizace

PROGRAMOVÁNÍ V C++ CVIČENÍ. Michal Brabec

Přetěžování operátorů

Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++

Jazyk C++ II. Šablony a implementace

Hotelová škola, Obchodní akademie a Střední průmyslová škola Teplice,Benešovo náměstí 1, příspěvková organizace

Jazyk C++, některá rozšíření oproti C

Chování konstruktorů a destruktorů při dědění

PB161 Programování v jazyce C++ Přednáška 4

OBJEKTOVÉ PROGRAMOVÁNÍ V C++ V PŘÍKLADECH 8 Proudová knihovna 8.1 Hierarchie proudů Standardně zavedené proudy

PŘETĚŽOVÁNÍ OPERÁTORŮ

Práce s polem a pamětí

PB161 Programování v C++ Proudy pro standardní zařízení Souborové proudy Paměťové proudy Manipulátory

Dědění, polymorfismus

Programování v C++ 2, 4. cvičení

Soubor jako posloupnost bytů

Jazyk C++ I. Polymorfismus

Objekty a třídy. Procedurální a objektově orientované programování. V této kapitole se naučíte: Procedurální a objektově orientované programování

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

1 Nejkratší cesta grafem

PB přednáška (26. října 2015)

Programování v C++ 2, 8. cvičení

Přetěžování operátorů

Digitální učební materiál

Struktury, funkce, reference

Datové proudy objektový vstup a výstup v C++

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

ZPRO v "C" Ing. Vít Hanousek. verze 0.3

PB161 Programování v jazyce C++ Přednáška 9

Transkript:

Vector datový kontejner v C++. 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: #include <vector> #include <iostream> int main() std::vector<int> a(7); // Pole 7 èísel std::vector<int> b; // Pole 0 èísel std::cout << "Pocet prvku v a je " << a.size() << " "; std::cout << "Pocet prvku v b je " << b.size() << std::endl; for(int i = 0; i < a.size(); i++) // "Normálnì lze používat operátor [] a[i] = i + 1; std::cout << "a[" << i << "] = " << a[i] << std::endl; b = a; //Bez problémù lze použít operátor =, lze použít //také kopírovací konstruktor a.resize(15); // a má nyní 15 prvkù std::cout << "Pocet prvku v a je " << a.size() << " "; std::cout << a[13] << std::endl; // Náhodný a.resize(3); // v a zùstalo jen prvních 3 prvkù for(i = 0; i < a.size(); i++) std::cout << "a[" << i << "] = " << a[i] << std::endl; for(i = 0; i < b.size(); i++) std::cout << "b[" << i << "] = " << b[i] << std::endl; if (a!= b) std::cout << "a!= b " << std::endl; return 0;

Výsledek: 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: #include <vector> #include <iostream> int main() std::vector<int> a; for(int i = 0; i < 5; i++) a.push_back(i+1); std::cout << "Posledni prvek je: " << a.back() << std::endl; for(i = 0; i < a.size(); i++) std::cout << a[i] << '\t'; std::cout << std::endl; while (!a.empty()) // Opakuj, dokud není prázdný (Dokud nemá 0 prvkù ) a.pop_back(); // Odeberu poslední prvek std::cout << "Velikost " << a.size() << std::endl; return 0;

Výsledek: Musím se jen zmínit o velmi užitečných metodách pro vkládání a likvidování prvků, jsou to 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ů: #include <vector> #include <iostream> using namespace std; int main() /*Mezera mezi > a > je dùležitá! Viz. text po prikladem*/ vector<vector<int> > matice(3); //Matice 3 x 0 for(int a = 0; a < 3; a++) matice[a].push_back(a+1); matice[a].push_back(a+2); matice[a].push_back(a+3); /* Nyní máme matici 3 x 3 */ for(int y = 0; y < 3; y++) for(int x = 0; x < 3; x++) cout << matice[x][y] << '\t'; cout << endl; return 0;

Výsledek: Definice vector<vector<int> > matice(3); obsahuje mezeru, kdybychom napsali >>, překladač by tento token považoval za operátor binárního posunu, a nahlásil by chybu v syntaxi. 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í přednášce se podrobněji podíváme na iterátory. Ukážeme si také další metody šablony vector.

Cvičení. Cv. 1: Napište program, který provádí součet a součin dvou celých kladných dvoubyteových čísel. Použijte šablonu vector. Zadání a výsledky zapisuje do matice. Čísla zadávejte z klávesnice a průběžně plňtě položky objektu vector. Pokud zadaná čísla jsou dvě 0ly, zadáváni ukončete a zadaná čísla a výsledky zobrazte. Jde o více rozměrné pole. Příklad výsledného zobarzení: 2 3 5 6 8 6 14 48 3 3 6 9