home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2001 December
/
Chip_2001-12_cd1.bin
/
chplus
/
cpp
/
stl1.cpp
< prev
Wrap
C/C++ Source or Header
|
2001-10-25
|
4KB
|
111 lines
//---------------------------------------------------------------------------
// 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;
}
//---------------------------------------------------------------------------