stl контейнери

22

Upload: imelda

Post on 15-Jan-2016

70 views

Category:

Documents


0 download

DESCRIPTION

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

TRANSCRIPT

Page 1: STL  контейнери
Page 2: STL  контейнери

ВидовеVector, Deque, List

Stack, Queue, Priority queue

Set, Multiset, Map, Multimap, Bitset

Page 3: STL  контейнери

VectorЕлементите се пазят в строга линейна

последователностПодобен на динамичен масив – елементите

са групирани заедно в паметтаРазширява се автоматичноДостъпът до елементите е по индекс

(константна сложност) и с обхождане с итератор (линейна сложност)

Елементи се добавят и премахват от края

Page 4: STL  контейнери

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]

Page 5: STL  контейнери

Dequedouble-ended queueЕлементите се пазят в строга линейна

последователностРазширява се автоматичноДостъп чрез индекс и итераторДобавяне и премахване на елементи в

началото и края

Page 6: STL  контейнери

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]

Page 7: STL  контейнери

ListДвойно свързан списъкЕлементите се съхраняват на различни

места в паметтаДобавяне и премахване на елементи

където и да е (константна сложност)Преместване на елементи (константна

сложност)Итериране в списъка (линейна сложност)

Page 8: STL  контейнери

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+

+ )

Page 9: STL  контейнери

StackLIFO (last-in first-out) стек, елементите се

добавят и изваждат от края (върха)При имплементацията за основа се

използва друг контейнер (vector, deque, list), в чийто край се добавят елементите

По подразбиране deque

Page 10: STL  контейнери

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

Page 11: STL  контейнери

QueueFIFO (first-in first-out) опашка, елементите

се вмъкват от едната страна и се измъкват от другата

При имплементацията за основа се използва друг контейнер (deque, list), в чийто край се добавят елементите

По подразбиране deque

Page 12: STL  контейнери

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

Page 13: STL  контейнери

Priority queueПриоритетна опашка, първият елемент е

най-важният, според определената подредба

При имплементацията за основа се използва друг контейнер (vector, deque), в чийто край се добавят елементите

По подразбиране vector

Page 14: STL  контейнери

Priority queue - използване#include <queue>priority_queue<int> mypqmypq.push(10), mypq.push(20),

mypq.push(15)mypq.top() // 20mypq.pop()

Page 15: STL  контейнери

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

елементите по тяхната стойностРеализира се като двоично дърво за

претърсване

Page 16: STL  контейнери

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)

Page 17: STL  контейнери

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

Page 18: STL  контейнери

MapСъхранява елементи с ключ и стойност,

ключа е уникаленЕфективност при достъпване на

елементите по ключаДиректен достъп до елементите

Page 19: STL  контейнери

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

Page 20: STL  контейнери

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

Page 21: STL  контейнери

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

Page 22: STL  контейнери

Край!