====== 5 - Standadní knihovna šablon ====== ===== STL - vektor, list, map - přehled ===== #include #include #include #include using namespace std; int main() { vector A(3); A.push_back(10); for (int i = 0; i < A.size(); i++) { cout << "A[" << i << "] = " << A[i] << "\n"; } // iterator - ukazatel (reference) na prvek datove struktury // ma stejny datovy typ, jako struktura vector::iterator i; // neinicializovany iterator datoveho typu std::vector vector::const_iterator i2 = A.begin(); // begin() - reference na zacatek vektoru // end() - reference na konec vektoru i = A.begin(); *i = 33; cout << *i << "\n"; // *i2 = 100; const_iterator -> read-only pristup for (i = A.begin(); i != A.end(); i++) cout << *i << "\n"; // list - obousmerne retezeny seznam list B; cout << " - list -\n"; for(int j = 0; j < 5; j++) B.push_back(j*j); // 0, 1, 4, 9, 16 // push_back, pop_back, back // push_front, pop_front, front B.push_front(100); list::iterator i3 = B.begin(); for (; i3 != B.end(); i3++) cout << *i3 << "\n"; i3--; i3--; // posunu iterator o dve pozice zpet cout << " - insert - \n"; B.insert(i3, 99); // vlozim cislo na aktualni pozici iteratoru for (i3 = B.begin(); i3 != B.end(); i3++) cout << *i3 << "\n"; // sekvencni kontejner / struktura : a[0], a[1], ..., a[N] // asociativni kontejner / struktura // klicem je libovolny datovy typ : a[0], a['0'], a["nula"] map C; // C[klic] = hodnota - par klic-hodnota C["Ajedna"] = 1; C["Bdva"] = 2; C["Ctri"] = 3; C["Dctyri"] = 4; map::iterator i4; // klic: first, hodnota: second for (i4 = C.begin(); i4 != C.end(); i4++) cout << i4->first << "\t:" << i4->second << "\n"; return 0; } ===== STL - zásobník ===== #include #include int main() { std::stack zasobnik; /* preddefinovane metody size - vraci velikost zasobniku empty - vrati binarni cislo, 1 - prazdny, 0 - neprazdny push - vlozi svuj argument na vrchol zasobniku pop - odebere vrchol zasobniku top - vraci prvek na vrcholu zasobniku */ std::cout << "velikost zasobniku je " << zasobnik.size() << std::endl; for (int i = 0; i < 5; i++) { zasobnik.push('a' + i); } std::cout << "velikost zasobniku je " << zasobnik.size() << std::endl; std::cout << "na vrcholu je prvek " << zasobnik.top() << std::endl; while (!zasobnik.empty()) { std::cout << "> " << zasobnik.top() << std::endl; zasobnik.pop(); } std::cout << "velikost zasobniku je " << zasobnik.size() << std::endl; return 0; } ===== STL - asociativní kontejner ===== #include #include #include using namespace std; // trida pro porovnavani struct cmp_str { bool operator() (string a, string b) { // nominalni chovani: 1 v pripade, // ze druhy argument je vetsi nez prvni // v nasem pripade tedy chovani zmenime return (a < b) ? 0 : 1; } }; int main() { // map - razeni se ridi implicitnim pravidlem razeni stringu // map - razeni se ridi vlastnim pravidem tridy cmp map kluci; // postupne vkladani dat do kontejneru indexaci kluci["Bastar"] = 50; kluci["Bohunek"] = 40; // vkladani pomoci funkce insert() kluci.insert(pair("Bosak", 34)); // insert + make_pair // kluci.insert(make_pair("Dolezal", 60)); // value_type, ktera je metodou kontejneru kluci.insert(map::value_type("Henych", 0)); cout << "Velikost kontejneru: " << kluci.size() << "\n"; // kluci.insert(pair("Bastar", 0)); map::iterator i; for (i = kluci.begin(); i != kluci.end(); i++) { cout << (*i).first << ": " << (*i).second << "\n"; } // vyhledavani - funkce find([hodnota klice]) // navratovou hodnotou je iterator // i = kluci.find("Bosak S."); i = kluci.find("Bosak"); kluci.erase(i); for (i = kluci.begin(); i != kluci.end(); i++) { cout << i->first << ": " << i->second << "\n"; } map m; m['a'] = 50; m['b'] = 100; m['c'] = 200; map::iterator mi; mi = m.find('b'); cout << mi->second << "\n"; return 0; }