Upload
imelda
View
71
Download
0
Embed Size (px)
DESCRIPTION
STL контейнери. Видове. Vector, Deque, List Stack, Queue, Priority queue Set, Multiset, Map, Multimap, Bitset. Vector. Елементите се пазят в строга линейна последователност Подобен на динамичен масив – елементите са групирани заедно в паметта Разширява се автоматично - PowerPoint PPT Presentation
Citation preview
ВидовеVector, Deque, List
Stack, Queue, Priority queue
Set, Multiset, Map, Multimap, Bitset
VectorЕлементите се пазят в строга линейна
последователностПодобен на динамичен масив – елементите
са групирани заедно в паметтаРазширява се автоматичноДостъпът до елементите е по индекс
(константна сложност) и с обхождане с итератор (линейна сложност)
Елементи се добавят и премахват от края
Vector - използване#include <vector>vector<int> myvectormyvector.push_back (100)myvector.clear()vector<int>::iterator it for ( it=myvector.begin() ; it <
myvector.end(); it++ ) {…}myvector[5]
Dequedouble-ended queueЕлементите се пазят в строга линейна
последователностРазширява се автоматичноДостъп чрез индекс и итераторДобавяне и премахване на елементи в
началото и края
Deque - използване #include <deque>deque<int> mydequemydeque.push_back (5), mydeque.pop_back()mydeque.push_front (10)deque<int>::iterator it
for ( it=mydeque.begin() ; it < mydeque.end(); it++ ) {…}
mydeque[1]
ListДвойно свързан списъкЕлементите се съхраняват на различни
места в паметтаДобавяне и премахване на елементи
където и да е (константна сложност)Преместване на елементи (константна
сложност)Итериране в списъка (линейна сложност)
List - използване#include <list>list<int> mylistmylist.push_back(5)list<int>::iterator it, ++itmylist.insert (it,10)mylist.sort()for ( it=mylist.begin() ; it != mylist.end(); it+
+ )
StackLIFO (last-in first-out) стек, елементите се
добавят и изваждат от края (върха)При имплементацията за основа се
използва друг контейнер (vector, deque, list), в чийто край се добавят елементите
По подразбиране deque
Stack - използване#include <stack>stack<int> mystackmystack.push(5)mystack.pop()
QueueFIFO (first-in first-out) опашка, елементите
се вмъкват от едната страна и се измъкват от другата
При имплементацията за основа се използва друг контейнер (deque, list), в чийто край се добавят елементите
По подразбиране deque
Queue - използване#include <queue>queue<int> myqueuemyqueue.push (5)myqueue.front()myqueue.pop()
Priority queueПриоритетна опашка, първият елемент е
най-важният, според определената подредба
При имплементацията за основа се използва друг контейнер (vector, deque), в чийто край се добавят елементите
По подразбиране vector
Priority queue - използване#include <queue>priority_queue<int> mypqmypq.push(10), mypq.push(20),
mypq.push(15)mypq.top() // 20mypq.pop()
SetСъхранява уникални елементиСамите елементи са ключовеЕфективност при достъпване на
елементите по тяхната стойностРеализира се като двоично дърво за
претърсване
Set - използване#include <set>set<int> mysetset<int>::iterator itmyset.insert(20) //int myints[]= {5,10,15}
myset.insert (myints,myints+3)for (it=myset.begin(); it!=myset.end(); it++)
{…}it=myset.find(20)myset.erase (it)
MultisetПозволява повтарящи се елементи#include <set>multiset<int> mymultisetmultiset<int>::iterator itit=mymultiset.insert(25)(int) mymultiset.count(25)
MapСъхранява елементи с ключ и стойност,
ключа е уникаленЕфективност при достъпване на
елементите по ключаДиректен достъп до елементите
Map - използване#include <map>map<char,int> mymapmap<char,int>::iterator itmymap['a']=10mymap['b']=20mymap.insert ( pair<char,int>('a',100) ) //-it=mymap.find('b')mymap.erase (it),mymap.erase ( it,
mymap.end())
MultimapПозволява повтарящи се ключове#include <map>multimap<char,int> mymultimapmymultimap.insert ( pair<char,int>('z',150) )mymultimap.insert (it, pair<char,int>('z',400))(int) mymultimap.count('z')multimap<char,int>::iterator itit=mymultimap.find('z')mymultimap.erase(it), mymultimap.erase('z')
BitsetСпециален контейнер за битовеВсеки елемент заема един бит#include <bitset>bitset<4> mybits, bitset<4> mybits
(string("1011"))mybits.set() //1111, mybits.set(2,0) //1011,
mybits.flip(0) // 1010, mybits.reset(3) //0010mybits[1], mybits.count()
Край!