From 56b536368bee988521c89c753cc7321141b6a4e1 Mon Sep 17 00:00:00 2001 From: Lugaricci Date: Fri, 6 Mar 2026 15:30:21 +0100 Subject: [PATCH] pridani poznamek s conteinery, restrukturalizace, oprava kodu pridani poznamek ke containerum zatim pouze s vectory poznamky z hodim maji ted vlastni podslozku lehka oprava kodu vsede mozne, hlavne pridani cpp pro lepsi cteni a oprava drobnych chybek --- Containery (vector, list, map).md | 161 ++++++++++++++++++++ 3. týden.md => poznamky z hodin/3. týden.md | 0 poznamky z hodin/Cviceni 2.md | 53 +++++++ 3 files changed, 214 insertions(+) create mode 100644 Containery (vector, list, map).md rename 3. týden.md => poznamky z hodin/3. týden.md (100%) create mode 100644 poznamky z hodin/Cviceni 2.md diff --git a/Containery (vector, list, map).md b/Containery (vector, list, map).md new file mode 100644 index 0000000..6479d78 --- /dev/null +++ b/Containery (vector, list, map).md @@ -0,0 +1,161 @@ +# Vector +- [geegs for geegs](https://www.geeksforgeeks.org/cpp/vector-of-strings-in-cpp/) - to jsem prakticky vykradl +- **vlastně třída, která je implementací dynamického pole** +- Proč se to jmenuje vector? Protože to autor standardní knihovny (Alex Stepanov) prostě nešikovně pojmenoval +> "One could argue that valarray should have been called vector because it is a traditional mathematical vector and that vector should have been called array. However, this is not the way the terminology evolved." - Bjarne Stroustrup (autor jazyka) + +Vektory mají svoje funkce, které umožňují základní operace s polem typu: přidání prvku na začátek a na konec, přidání prvku na n-tou pozici, přepsaní a přístup, mazání prvků... +## Inicializace +Syntax: `vector v1;` +Příklad inicializace: +```cpp +#include +#include + +int main(void) +{ + vector v1; //neinicializovaný vektor + vector v2 = {1, 2, 3}; //vekor s prvky 1 2 3 + vectro v3(8, 42); //vektor o 8 prvcích o hodnotě 42 + + vector v4 = {'f', 's', 'o', 'c', 'i', 'e', 't', 'y'}; + vector v5 = + { + "Do not go gentle into that good night,", + "Old age should burn and rave at close of day;", + "Rage, rage against the dying of the light." + }; + vector v6; + +return 0; +} + +``` + +## begin(), end(), empty() +- `begin()` a `end()` jsou to funkce vektoru, které vrací iterátory na první a poslední hodnotu. +- Když je vector prázdny platí: `v.begin() == v.end()`. To můžeme taky poznat pomocí funkce `v.end()`. +- `v.end()` vždy ukazuje **na prázdnou hodnotu za posledním prvkem vektoru**, kam lze bezstarostně zapisovat další prvek, když třeba. + +## Přidání prvku +- máme funkce `v.push_back()` a `v.insert()` +- `v.push_back(hodnota)` přidá hodnotu na konec vektoru +- Funkce `v.insert()` přidává hodnotu/hodnoty na n-tý prvek a má několik různých možností zápisu: +```cpp +#include +#include +using namespace std; + +int main(void) +{ + //prazdny koncert + vector koncert; + //pridani prvniho prvku na konec pomoci push_back + koncert.push_back("prvni pisnicka"); + //pridani prvku na posledni pozici + koncert.insert(koncert.end(), "lidi jdou pít do klubu") + //pridani 3 prvku na 1. pozici (tedy prvek na posledni pozici se posune o 3) + koncert.insert(koncert.begin() + 1, 3, "opravdu posledni pisnicka"); + + for (string udalost : koncert) + { + cout << udalost << endl; + } + +return 0; +} + +//VYPIS: +//prvni pisnicka +//opravdu posledni pisnicka +//opravdu posledni pisnicka +//opravdu posledni pisnicka +//lidi jdou pít do klubu +``` + +Možnosti `insert`: +```cpp +vector a; +vector b; +a.insert(pozice a, hodnota); +a.insert(pozice a, pocet_prvku, hodnota); +a.insert(pozice a, poc_poz_jineho_vek, konc_pozice_jin_vek); + +//přepíše vektor b na začátek vektoru a +a.insert(a.begin(), b.begin(), b.(end)) +``` + +## Přístup k prvkům a změna +- v podstatě mám 2 možnosti a to `v[i]` nebo `v.at(i)` +- Fungují stejně akorát `v.at()` vyhodí výjimku při pokusu přistupovat mimo pole a je nepatrně pomalejší +- výjimka je `std::out_of_range` + +```cpp +#include +#include +using namespace std; + +int main(void) +{ + vector v = {"Ronald", "Artiom", "Chang", "Waldo"}; + cout << v[0] << endl; + cout << v.at(3) << endl; + //cout << v.at(4) << endl; //vyhodí výjimku out of range + + //zmena jmen + v[1] = "Mercedes"; + v.at(2) = "Anička"; + //v.at(7) = "Pavla"; //vyhodi vyjimku + + return 0; +} +``` + +## size a využití +- `v.size()` vrací počet prvků + +```cpp +#include +#include +using namespace std; + +int main(void) +{ + vector v = {"Ronald", "Artiom", "Chang", "Waldo"}; + cout << v.size() << endl; //vypíše 4 + + for (int i = 0; i < v.size(); i++) + {cout << v[i] << " ";} //vypíše všechny jména vedle sebe + return 0; +} +``` + +## Mázaní prvků +- mám 2 možnosti a to `v.pop_back()` a `v.erase()` +- `v.pop_back()` vymaže poslední prvek z vektoru +- `v.erase()` vymaže n-tý prvek a posune celý vektor. Potřebuje knihovnu `` +```cpp +#include +#include +#include +using namespace std; + +int main() { + vector v = {1, 2, 8, 4, 0}; + + v.pop_back(); //vymaže 0 + v.erase(v.begin()); // vymaže 1 + v.erase(find(v.begin(), v.end(), 8)); //najde a vymaže 8 + + + for (int i = 0; i < v.size(); i++) { + cout << v[i] << " "; + } //zbyde 2,4 + return 0; +} +``` +# List + +# Map + +# Unordered_map \ No newline at end of file diff --git a/3. týden.md b/poznamky z hodin/3. týden.md similarity index 100% rename from 3. týden.md rename to poznamky z hodin/3. týden.md diff --git a/poznamky z hodin/Cviceni 2.md b/poznamky z hodin/Cviceni 2.md new file mode 100644 index 0000000..eb0f247 --- /dev/null +++ b/poznamky z hodin/Cviceni 2.md @@ -0,0 +1,53 @@ +- 26. 2 - čtvrtek 11:00 + +- dnes: třídy a objekty, public/protected/private, constructor/destructor + +# Konstruktory +- můžu přetěžovat, ale **POZOR**: + +``` + TridaA(void) //constructor pro inicializaci promenne + { + this->a = 0; + this->b = 0; + this->c = 0; + std::cout << "Byl zavolan konstruktor bez arg." << std::endl; + } + + TridaA(int a) //inicializace z argumentu constructoru + { + this->a = a; + this->b = 0; + this->c = 0; + std::cout << "Byl zavolan konstruktor s arg." << std::endl; + } + + TridaA(int a, int b = 42, int c = 64) + { + this->a = a; + this->b = b; + this->c = c; + } +``` + +Chyby kompilatoru: +``` +main.cpp: In function ‘int main()’: +main.cpp:44:16: error: call of overloaded ‘TridaA(int)’ is ambiguous + 44 | TridaA obj1(1); //inicializujeme objekt + | ^ +main.cpp:44:16: note: there are 4 candidates +main.cpp:31:5: note: candidate 1: ‘TridaA::TridaA(int, int, int)’ + 31 | TridaA(int a, int b = 42, int c = 64) + | ^~~~~~ +main.cpp:23:5: note: candidate 2: ‘TridaA::TridaA(int)’ + 23 | TridaA(int a) //inicializace z argumentu constructoru + | ^~~~~~ +main.cpp:3:7: note: candidate 3: ‘constexpr TridaA::TridaA(const TridaA&)’ + 3 | class TridaA + | ^~~~~~ +main.cpp:3:7: note: candidate 4: ‘constexpr TridaA::TridaA(TridaA&&)’ + +``` + +- **MUSÍ TO BÝT JEDNOZNAČNÉ:** \ No newline at end of file