home *** CD-ROM | disk | FTP | other *** search
- //---------------------------------------------------------------------------
- // autor: Jaroslav Franek
- // datum: 25.10.2001
- // o co jde: priklad pouziti knihovny STL,
- // doplnek ke clanku v Chipu
- // vytvoreno a odladeno v Borland C++ Builderu
- // mozna nebude fungovat v Microsoft Visual C++ v6.0 (vnorene sablony)
- //---------------------------------------------------------------------------
-
- //#pragma hdrstop
-
- #include <vector>
- #include <list>
- #include <stack>
- #include <algorithm>
- #include <iostream>
-
- //---------------------------------------------------------------------------
- int main()
- {
- int pole[20] = { 12, 32, 55, 11, 26,
- 33, 48, 56, 27, 13,
- 18, 19, 7, 99, 17, // minimum je '7'
- 29, 91, 74, 10, 24 };
-
- std::cout << "Vypis pole : ";
- // jak vypsat pole a nepouzit smycku?
- // co takhle zkopirovat ty prvky na vystup
- // pomoci algoritmu copy a vystupniho iteratoru
- std::copy(pole, pole + 20, std::ostream_iterator<int>(std::cout, " "));
- std::cout << std::endl;
-
- // minimalni prvek v poli je...
- int min_pole = *std::min_element(pole, pole + 20);
- std::cout << "Minimum pole je " << min_pole << std::endl;
-
- // vytvorim vektor a zaroven
- // provedu jeho inicializaci
- // pomoci prvku pole 'pole'
- std::vector<int> vec(pole, pole + 20);
-
- std::cout << "Vypis vektoru : ";
- // jak vypsat vektor a nepouzit smycku?
- // to uz umime
- std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, " "));
- std::cout << std::endl;
-
- // minimalni prvek ve vektoru je...
- int min_vec = *std::min_element(vec.begin(), vec.end());
- std::cout << "Minimum vektoru je " << min_vec << std::endl;
-
- // minimum z druheho az pateho prvku
- // rozsahy udane pomoci iteratoru maji
- // vzdy charakter polouzavrenych (nebo polootevrenych)
- // intervalu [prvni prvek, jeden prvek za)
- // tzn: vec.begin()+1 je iterator na 2. prvek a patri do zpracovavane oblasti
- // vec.begin()+5 je iterator na 6. prvek a nepatri do zpracovavane oblasti
- int min_vec_2az5 = *std::min_element(vec.begin() + 1, vec.begin() + 5);
- std::cout << "Minimum vektoru (2. az 5.prvku) je " << min_vec_2az5 << std::endl;
-
- // a ted 'trik' se seznamem
- // vytvorim ho analogicky jako vektor,
- // ale k inicializaci pouziju vektor 'vec'
- std::list<int> seznam(vec.begin(), vec.end());
-
- std::cout << "Vypis seznamu : ";
- // jak vypsat seznam a nepouzit smycku?
- // uplne stejne (genericke programovani v plne krase...)
- std::copy(seznam.begin(), seznam.end(), std::ostream_iterator<int>(std::cout, " "));
- std::cout << std::endl;
-
- // minimalni prvek v seznamu je...
- int min_seznam = *std::min_element(seznam.begin(), seznam.end());
- std::cout << "Minimum seznamu je " << min_seznam << std::endl;
-
- // odstranim nejmensi prvek
- // (zopakuji volani funkce min_element,
- // normalne bych si ten iterator predtim ulozil,
- // ale aby to bylo stejne jako v clanku, tak:)
- seznam.erase(std::min_element(seznam.begin(), seznam.end()));
-
- std::cout << "Vypis seznamu (ze se opravdu odstranil minimalni prvek) : ";
- // tohle uz tu bylo...
- std::copy(seznam.begin(), seznam.end(), std::ostream_iterator<int>(std::cout, " "));
- std::cout << std::endl;
-
- // jak se tedy uklada ten iterator? takhle
- // inicializace prima (chybi hacek nad r :-)
- std::list<int>::iterator min_seznam_iter(std::min_element(seznam.begin(), seznam.end()));
- // nebo taky takhle
- // inicializace kopirovanim
- // std::list<int>::iterator min_seznam_iter = std::min_element(seznam.begin(), seznam.end());
-
- // iterator se dereferencuje jako ukazatel
- std::cout << "Minimum seznamu po odebrani minimalniho prvku je "
- << *min_seznam_iter << std::endl;
-
- // a jeste zasobnik
- std::stack<int, std::vector<int> > zasobnik;
- zasobnik.push(10);
- std::cout << "Na vrcholu zasobniku je " << zasobnik.top() << std::endl;
- zasobnik.pop();
-
- // To byla ukazka prace s poli, seznamy a vektory.
- // Videli jste nekde nejakou smycku (for, while,...)?
- // Vite, kde se pouzili vnorene sablony?
-
- return 0;
- }
- //---------------------------------------------------------------------------
-