1 / 22

STL контейнери

STL контейнери. Видове. Vector, Deque, List Stack, Queue, Priority queue Set, Multiset, Map, Multimap, Bitset. Vector. Елементите се пазят в строга линейна последователност Подобен на динамичен масив – елементите са групирани заедно в паметта Разширява се автоматично

imelda
Download Presentation

STL контейнери

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. STL контейнери

  2. Видове • Vector, Deque, List • Stack, Queue, Priority queue • Set, Multiset, Map, Multimap, Bitset

  3. Vector • Елементите се пазят в строга линейна последователност • Подобен на динамичен масив – елементите са групирани заедно в паметта • Разширява се автоматично • Достъпът до елементите е по индекс (константна сложност) и с обхождане с итератор (линейна сложност) • Елементи се добавят и премахват от края

  4. 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]

  5. Deque • double-ended queue • Елементите се пазят в строга линейна последователност • Разширява се автоматично • Достъп чрез индекс и итератор • Добавяне и премахване на елементи в началото и края

  6. 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]

  7. List • Двойно свързан списък • Елементите се съхраняват на различни места в паметта • Добавяне и премахване на елементи където и да е (константна сложност) • Преместване на елементи (константна сложност) • Итериране в списъка (линейна сложност)

  8. 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++ )

  9. Stack • LIFO (last-in first-out) стек, елементите се добавят и изваждат от края (върха) • При имплементацията за основа се използва друг контейнер (vector, deque, list), в чийто край се добавят елементите • По подразбиране deque

  10. Stack - използване • #include <stack> • stack<int> mystack • mystack.push(5) • mystack.pop()

  11. Queue • FIFO (first-in first-out) опашка, елементите се вмъкват от едната страна и се измъкват от другата • При имплементацията за основа се използва друг контейнер (deque, list), в чийто край се добавят елементите • По подразбиране deque

  12. Queue - използване • #include <queue> • queue<int> myqueue • myqueue.push (5) • myqueue.front() • myqueue.pop()

  13. Priority queue • Приоритетна опашка, първият елемент е най-важният, според определената подредба • При имплементацията за основа се използва друг контейнер (vector, deque), в чийто край се добавят елементите • По подразбиране vector

  14. Priority queue - използване • #include <queue> • priority_queue<int> mypq • mypq.push(10), mypq.push(20), mypq.push(15) • mypq.top() // 20 • mypq.pop()

  15. Set • Съхранява уникални елементи • Самите елементи са ключове • Ефективност при достъпване на елементите по тяхната стойност • Реализира се като двоично дърво за претърсване

  16. 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)

  17. Multiset • Позволява повтарящи се елементи • #include <set> • multiset<int> mymultiset • multiset<int>::iterator it • it=mymultiset.insert(25) • (int) mymultiset.count(25)

  18. Map • Съхранява елементи с ключ и стойност, ключа е уникален • Ефективност при достъпване на елементите по ключа • Директен достъп до елементите

  19. 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())

  20. 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')

  21. 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()

  22. Край!

More Related