230 likes | 385 Views
STL контейнери. Видове. Vector, Deque, List Stack, Queue, Priority queue Set, Multiset, Map, Multimap, Bitset. Vector. Елементите се пазят в строга линейна последователност Подобен на динамичен масив – елементите са групирани заедно в паметта Разширява се автоматично
E N D
Видове • Vector, Deque, List • Stack, Queue, Priority queue • Set, Multiset, Map, Multimap, Bitset
Vector • Елементите се пазят в строга линейна последователност • Подобен на динамичен масив – елементите са групирани заедно в паметта • Разширява се автоматично • Достъпът до елементите е по индекс (константна сложност) и с обхождане с итератор (линейна сложност) • Елементи се добавят и премахват от края
Vector - използване • #include <vector> • vector<int> myvector • myvector.push_back (100) • myvector.clear() • vector<int>::iterator it for ( it=myvector.begin() ; it < myvector.end(); it++ ) {…} • myvector[5]
Deque • double-ended queue • Елементите се пазят в строга линейна последователност • Разширява се автоматично • Достъп чрез индекс и итератор • Добавяне и премахване на елементи в началото и края
Deque - използване • #include <deque> • deque<int> mydeque • mydeque.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> mylist • mylist.push_back(5) • list<int>::iterator it, ++it • mylist.insert (it,10) • mylist.sort() • for ( it=mylist.begin() ; it != mylist.end(); it++ )
Stack • LIFO (last-in first-out) стек, елементите се добавят и изваждат от края (върха) • При имплементацията за основа се използва друг контейнер (vector, deque, list), в чийто край се добавят елементите • По подразбиране deque
Stack - използване • #include <stack> • stack<int> mystack • mystack.push(5) • mystack.pop()
Queue • FIFO (first-in first-out) опашка, елементите се вмъкват от едната страна и се измъкват от другата • При имплементацията за основа се използва друг контейнер (deque, list), в чийто край се добавят елементите • По подразбиране deque
Queue - използване • #include <queue> • queue<int> myqueue • myqueue.push (5) • myqueue.front() • myqueue.pop()
Priority queue • Приоритетна опашка, първият елемент е най-важният, според определената подредба • При имплементацията за основа се използва друг контейнер (vector, deque), в чийто край се добавят елементите • По подразбиране vector
Priority queue - използване • #include <queue> • priority_queue<int> mypq • mypq.push(10), mypq.push(20), mypq.push(15) • mypq.top() // 20 • mypq.pop()
Set • Съхранява уникални елементи • Самите елементи са ключове • Ефективност при достъпване на елементите по тяхната стойност • Реализира се като двоично дърво за претърсване
Set - използване • #include <set> • set<int> myset • set<int>::iterator it • myset.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> mymultiset • multiset<int>::iterator it • it=mymultiset.insert(25) • (int) mymultiset.count(25)
Map • Съхранява елементи с ключ и стойност, ключа е уникален • Ефективност при достъпване на елементите по ключа • Директен достъп до елементите
Map - използване • #include <map> • map<char,int> mymap • map<char,int>::iterator it • mymap['a']=10 • mymap['b']=20 • mymap.insert ( pair<char,int>('a',100) ) //- • it=mymap.find('b') • mymap.erase (it),mymap.erase ( it, mymap.end())
Multimap • Позволява повтарящи се ключове • #include <map> • multimap<char,int> mymultimap • mymultimap.insert ( pair<char,int>('z',150) ) • mymultimap.insert (it, pair<char,int>('z',400)) • (int) mymultimap.count('z') • multimap<char,int>::iterator it • it=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) //0010 • mybits[1], mybits.count()