Upload
roy-de-zomer
View
27
Download
0
Embed Size (px)
Citation preview
Standard Template Library
• Standard Template Library template standard
• container
‘sequentieel’ ‘associatief’ empty() size()
• iterator
vgl. pointer *p p++ ==
• algoritme zoeken, tellen
kopiëren, reverse sorteren heap
31
77 67
35
02
-
c.begin()
c.end()
STL container
sequential vector array, dynamisch list lijst, dubbel verbonden deque array, tweezijdige associative set verzameling map sleutel+waarde paren multimap .. meerwaardig adaptor priority_queue (niet list) queue rij (niet vector) stack stapel
STL vector
#include <vector> int main() { vector<int> v; int i; for (i=0; i<10; i++) v.push_back(i); cout << v.size() << endl; for (i=0; i<10; i++) cout << v[i] << “ ”; cout << endl << v.front() << “ ” << v.back() << endl; vector<int>::iterator p = v.begin(); while ( p != v.end() ) { cout << *p << “ ”; p++; } return 0; }
STL adaptor, map
#include <vector> #include <stack>
int main() {
stack<vector<int> > st; int i; for (i=0; i<10; i++) st.push(i); while ( !st.isempty() ) { cout << st.top() << “ ”; st.pop(); } return 0; }
#include <map> #include <string>
int main() {
map<string,int> mp; mp[“tim”] = 3; cout << mp[“tim”] << “ ” << mp[“bob”]; return 0; }
map<string,int>::iterator p = mp.find(“bob”);
spatie
lijsten
3 6 -1 7 6
lijsten linear lists ADT vs. implementatie • list • double ended queue “deque” • stapel stack LIFO • rij queue FIFO data type elementen hier niet belangrijk (bij sommige adt’s wél)
lijsten
3 6 -1 7 6
ADT linear list
first front/head
last back/tail
position
• create • is empty • insert
at/from front, back, position (?) before/after
• delete at … (?) new position
• value at position • search value
return position (?) not found
‘abstract’
data elementen lijst
data types • element • position • list • boolean
lijsten
3 6 -1 7 6
ADT double ended queue
first front/head
last back/tail
position
• create • is empty • insert • delete • value
at front, back (?) when empty
‘abstract’
data elementen lijst
data types • element • position • list • boolean
lijsten
ADT double ended queue
operation common name(s)
Ada C++ Java Perl PHP Python Ruby Javascript
insert element at back
inject, snoc
Append push_back offerLast push array_push append push push
insert element at front
push, cons
Prepend push_front offerFirst unshift array_unshift
appendleft unshift unshift
remove last element
eject Delete_Last
pop_back pollLast pop array_pop pop pop pop
remove first element
pop Delete_First
pop_front pollFirst shift array_shift
popleft shift shift
examine last element
Last_Element
back peekLast $array[-1]
end <obj>[-1] last <obj>[<obj>.length - 1]
examine first element
First_Element
front peekFirst $array[0]
reset <obj>[0] first <obj>[0]
zegt wie?
http://en.wikipedia.org/wiki/Double-ended_queue#Operations
lijsten
3 6 -1 7 6
ADT stack last-in-first-out
top
• create • is empty • insert ‘push’ • delete ‘pop’ • value
at ‘top’ (?) when empty
data types • element • position • list • boolean
Drozdek 4.1
lijsten
3 6 -1 7 6
ADT queue first-in-first-out
last back/tail
• create • is empty • insert ‘enqueue’ • delete ‘dequeue’ • value
at front (*) (?) when empty
data types • element • position • list • boolean
first front/head
(*) andere kant makkelijk te implementeren
Drozdek 4.2
representaties lijst
representatie/implementatie lege lijst kopiëren, gelijkheidstest ‘diepte’ • array (bv:stack)
willekeurige positie langzaam flexibele grootte: vector
• linked enkel(queue) /dubbel verbonden
prev next
Λ last first
representaties lijst
representatie/implementatie • array deque
circular
last first
last first
enqueue
leeg / vol
Drozdek 3.3
representaties lijst simplist: linkinversie
vorig deze
vorig deze
slechts één positie ‘binnen lijst’
niet bij Drozdek
lijsten
lijsten linear lists ADT vs. implementatie • list • double ended queue “deque” • stapel stack LIFO • rij queue FIFO
gaan uit van elementen zonder ‘eigenschappen’ lineaire structuur vergelijk nu met set priority queue