Warning
This page is located in archive.

5 - Standadní knihovna šablon

STL - vektor, list, map - přehled

#include <iostream>
#include <vector>
#include <list>
#include <map>
 
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 <iostream>
#include <stack>
 
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 <iostream>
#include <map>
#include <utility>
 
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;
}

courses/bd5b37ppc/tutorials/05.txt · Last modified: 2019/10/03 20:57 by viteks