18
STL

Datastruct2

Embed Size (px)

Citation preview

STL

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

abstracte datatypen

abstract data type

ADT

test

in

out

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

set

set [=verzameling] • als ADT, operaties?

• implementatie? zoeken?