33
1 Container Types Sequence Containers Associative Containers Associative Containers Adapter Classes Adapter Classes Stack Container Stack Container Queue Container Queue Container Priority Queue Priority Queue Container Container Set Container Set Container Map Container Map Container C++ Arrays C++ Arrays Containers Overview Containers Overview and Class Vector and Class Vector Vectors Vectors Templated Insertion Templated Insertion Sort Sort Template Classes Template Classes Store Class Store Class

1 Container Types Container Types Sequence Containers Sequence Containers Associative Containers Associative Containers Adapter Classes Adapter Classes

Embed Size (px)

Citation preview

Page 1: 1 Container Types Container Types Sequence Containers Sequence Containers Associative Containers Associative Containers Adapter Classes Adapter Classes

1

Container TypesSequence ContainersAssociative ContainersAssociative ContainersAdapter ClassesAdapter Classes

Stack ContainerStack ContainerQueue ContainerQueue ContainerPriority Queue ContainerPriority Queue ContainerSet ContainerSet ContainerMap ContainerMap Container

C++ ArraysC++ Arrays

Containers OverviewContainers Overviewand Class Vectorand Class Vector

VectorsVectors

Templated Insertion SortTemplated Insertion Sort

Template ClassesTemplate ClassesStore ClassStore Class

Page 2: 1 Container Types Container Types Sequence Containers Sequence Containers Associative Containers Associative Containers Adapter Classes Adapter Classes

2

STLSTL C++ STL provides 10 container classes 4 additional types considered “near-containers”

– array– string– bitset– valarray

Extensions to Standard– slist– rope – huge strings– unordered_set, unordered_map,

unordered_multiset, unordered_multimap

Page 3: 1 Container Types Container Types Sequence Containers Sequence Containers Associative Containers Associative Containers Adapter Classes Adapter Classes

3

Container CategoriesContainer Categories

Sequence Containers

Adapter Containers

Associative Containers

Vector Stack Set, Multiset

Deque Queue Map, Multimap

List Priority Queue

Page 4: 1 Container Types Container Types Sequence Containers Sequence Containers Associative Containers Associative Containers Adapter Classes Adapter Classes

4

Sequence ContainersSequence Containers

A sequence container stores data by position in linear order 1st element, 2nd element, and so forth

P o s itio n 0 P o s itio n 4P o s itio n 3P o s itio n 2P o s itio n 1

S eq uenc e C o ntainer

Page 5: 1 Container Types Container Types Sequence Containers Sequence Containers Associative Containers Associative Containers Adapter Classes Adapter Classes

5

Associative ContainersAssociative Containers Associative containers store elements by key

– Ex: name, SS #, or part number

A program accesses an element in an associative container by its key– May bear no relationship to the location of the

element in the container– Access by key O(lg N)

Implementation?

Page 6: 1 Container Types Container Types Sequence Containers Sequence Containers Associative Containers Associative Containers Adapter Classes Adapter Classes

6

Adapter ClassesAdapter Classes Use a sequence container as underlying

storage structure– E.g. Stack and Queue use Deque– Design Pattern: Adapter

Adapter’s interface provides a restricted set of operations from underlying storage structure– How is stack restricted? – queue?

Page 7: 1 Container Types Container Types Sequence Containers Sequence Containers Associative Containers Associative Containers Adapter Classes Adapter Classes

7

Stack ContainersStack Containers

A stack allows access at only one end of sequence, called the top.

C

A top

Push A

B

Atop

Push B

Btop

Push C(a)

C

B

Atop

Pop C(b)

B

A top

Pop B

A

Page 8: 1 Container Types Container Types Sequence Containers Sequence Containers Associative Containers Associative Containers Adapter Classes Adapter Classes

8

Queue ContainersQueue Containers

A queue is a container that allows access only at front and back

A B C D

E

B C D E

A

back frontInsert Delete

Page 9: 1 Container Types Container Types Sequence Containers Sequence Containers Associative Containers Associative Containers Adapter Classes Adapter Classes

9

Priority Queue ContainersPriority Queue Containers

priority queue -- HPFO

Push elements in any order -- pop operation removes the largest (or smallest) value

18

3

13

15

V alue = 8

27

Page 10: 1 Container Types Container Types Sequence Containers Sequence Containers Associative Containers Associative Containers Adapter Classes Adapter Classes

10

Set ContainersSet Containers

A set is a collection of unique values, called keys or set members.

5

3

1

1527

S et A

F o rd

B uic k

H o nd a

S et B

B M W

Jeep

Jaguar

Page 11: 1 Container Types Container Types Sequence Containers Sequence Containers Associative Containers Associative Containers Adapter Classes Adapter Classes

11

Map ContainersMap Containers

A map is a storage structure that implements a key-value relationship.

D 7 B -9 1 6

W 9 1 -A 8 3

4 .9 5

1 2 .5 0

M irage

C allo w ay

A 2 9 -4 6 8

D 7 B -9 1 6

W 9 1 -A 8 3

In d ex Ven d o rP riceP art #

A 2 9 -4 6 8 8 .7 5 M art in

Page 12: 1 Container Types Container Types Sequence Containers Sequence Containers Associative Containers Associative Containers Adapter Classes Adapter Classes

12

C++ ArraysC++ Arrays

Fixed-size collection – homogenous

Stores the n (size) elements in contiguous block

arr[0 ] arr[1 ] arr[2 ]

0 1 2 n -1

. . . arr[n -1 ]

Page 13: 1 Container Types Container Types Sequence Containers Sequence Containers Associative Containers Associative Containers Adapter Classes Adapter Classes

13

Evaluating an Array as a Evaluating an Array as a ContainerContainer

Size is fixed at the time of its declaration– Does an array know its size?

C++ arrays do not allow the assignment of one array to another– Requires loop structure with the array size as an

upper bound– *or* what algorithm?

Page 14: 1 Container Types Container Types Sequence Containers Sequence Containers Associative Containers Associative Containers Adapter Classes Adapter Classes

14

VectorsVectors

v [ 0 ] v [ 1 ] v [ 2 ] . . . v [ n-1 ] ro o m to gro w

0 1 2 n-1

Page 15: 1 Container Types Container Types Sequence Containers Sequence Containers Associative Containers Associative Containers Adapter Classes Adapter Classes

15

CLASS vector Constructors <vector>

vector ();Create an empty vector. Default.

 vector (size_type n, const T& value = T ());

Create a vector with n elements equal to “value”. If the value argument is omitted, the elements are filled with the default value for type T. Type T must have a default constructor, and the default value of type T is specified by the notation T ().

Page 16: 1 Container Types Container Types Sequence Containers Sequence Containers Associative Containers Associative Containers Adapter Classes Adapter Classes

16

CLASS vector Constructors <vector>

vector (InputIter first, InputIter last);Initialize the vector using the range [first, last).

first and last are input iterators (can be read).

Page 17: 1 Container Types Container Types Sequence Containers Sequence Containers Associative Containers Associative Containers Adapter Classes Adapter Classes

17

CLASS vector Operations <vector>

T& back ();Return the value of the item at the rear of the vector.

Precondition: The vector must contain at least one element.

 const T& back () const;

Constant version of back().  

bool empty () const;Return true if the vector is empty and false

otherwise.

Page 18: 1 Container Types Container Types Sequence Containers Sequence Containers Associative Containers Associative Containers Adapter Classes Adapter Classes

18

CLASS vector Operations <vector>

T& operator[ ] (size_type i);Allow the vector element at index i to be retrieved or

modified.Precondition: The index, i, must be in the range 0

i < n, where n is the number of elements in the vector.

Postcondition: If the operator appears on the left side of an assignment statement, the expression on the right side

modifies the element referenced by the index.  

const T& operator[ ] (size_type i) const;Constant version of the index operator.

Page 19: 1 Container Types Container Types Sequence Containers Sequence Containers Associative Containers Associative Containers Adapter Classes Adapter Classes

19

CLASS vector Operations <vector>

void push_back (const T& value);Add a value at the rear of the vector.

Postcondition: The vector has a new element at the rear and its size increases by 1.

 void pop_back ();

Remove the item at the rear of the vector.Precondition: The vector is not empty.Postcondition: The vector has a new element at

the rear or is empty.

Page 20: 1 Container Types Container Types Sequence Containers Sequence Containers Associative Containers Associative Containers Adapter Classes Adapter Classes

20

CLASS vector Operations <vector>

iterator erase (iterator pos);Erase the element pointed to by pos.Precondition: The vector is not empty.Postcondition: The vector has one fewer element.

iterator erase (iterator first, iterator last);Erase all elements within the iterator range [first,

last).Precondition: The vector is not empty.Postcondition: The size decreases by the

number of elements in the range.

Both invalidate iterators beyond range erased.

Page 21: 1 Container Types Container Types Sequence Containers Sequence Containers Associative Containers Associative Containers Adapter Classes Adapter Classes

21

CLASS vector Operations <vector>

iterator insert (iterator pos, const T& value);Insert value before pos, and return an iterator pointing to the position of the new value in the vector. The

operation invalidates any existing iterators beyond pos.Postcondition: The list has a new element.

Page 22: 1 Container Types Container Types Sequence Containers Sequence Containers Associative Containers Associative Containers Adapter Classes Adapter Classes

22

CLASS vector Operations <vector>

void resize (size_type n, const T& fill = T());Modify the size of the vector. If the size is increased,

the value fill is added to the elements on the tail of the vector. If the size is decreased, the original

values at the front are retained.Postcondition: The vector has size n.

 void reserve (size_type n);

Only will increase capacity. Postcondition: capacity () >= n

size_type size () const;Return the number of elements in the vector.

Page 23: 1 Container Types Container Types Sequence Containers Sequence Containers Associative Containers Associative Containers Adapter Classes Adapter Classes

23

Output with VectorsOutput with Vectorstemplate <typename T>

void

writeVector (const vector<T>& v)

{// capture the size of the vector in n

size_t i, n = v.size ();

for (i = 0; i < n; ++i)

cout << v[i] << " ";

cout << endl;

}

Page 24: 1 Container Types Container Types Sequence Containers Sequence Containers Associative Containers Associative Containers Adapter Classes Adapter Classes

24

Declaring Vector ObjectsDeclaring Vector Objects// vector of size 5 containing the integer // value 2

vector<int> intVector (5, 2);

// vector of size 10; each element // contains the empty string

vector<string> strVector (10);

Page 25: 1 Container Types Container Types Sequence Containers Sequence Containers Associative Containers Associative Containers Adapter Classes Adapter Classes

25

Adding and Removing Adding and Removing Vector ElementsVector Elements

12 -5 8 1412 -5 8 14

0

Before

v.size() == 4

43210321

v.size() == 5

After v.push_back (10)

10

4.64.6 6.8

0

Before

v.size() == 2

01

v.size() == 1

After v.pop_back ()

Page 26: 1 Container Types Container Types Sequence Containers Sequence Containers Associative Containers Associative Containers Adapter Classes Adapter Classes

26

Resizing a VectorResizing a Vectorint arr[5] = {7, 4, 9, 3, 1};

vector<int> v (arr, arr + 5);// v initially has 5 integers

v.resize (10);// size is doubledv.resize (4); // vector contracted; data

// is lost

Page 27: 1 Container Types Container Types Sequence Containers Sequence Containers Associative Containers Associative Containers Adapter Classes Adapter Classes

27

Insertion SortInsertion Sort Can use with vector’s or arrays Count comparisons Best-case run time?– T(N) = N - 1 = O(N)

Worst-case?

1

1

)(Nj

j

jNT

Page 28: 1 Container Types Container Types Sequence Containers Sequence Containers Associative Containers Associative Containers Adapter Classes Adapter Classes

28

Insertion Sort AlgorithmInsertion Sort Algorithm// sort a vector of type T using insertion // sort

template <typename T>

void insertionSort (vector<T>& v)

{// Place v[i] into the sublist v[0] ... //

v[i-1], 1 <= i < n, so it is in the // correct position

size_t n = v.size ();

Page 29: 1 Container Types Container Types Sequence Containers Sequence Containers Associative Containers Associative Containers Adapter Classes Adapter Classes

29

Insertion Sort AlgorithmInsertion Sort Algorithmfor (size_t i = 1; i < n; ++i)

{ // Index j scans down list from v[i] // looking for correct position to // locate target. Assigns it to v[j]

size_t j = i;

T temp = v[i]; // Locate insertion point by scanning

// downward as long as temp < v[j-1] // and we have not encountered the // beginning of the list

Page 30: 1 Container Types Container Types Sequence Containers Sequence Containers Associative Containers Associative Containers Adapter Classes Adapter Classes

30

Insertion Sort AlgorithmInsertion Sort Algorithmwhile (j > 0 && temp < v[j-1])

{ // Shift elements up list to make // room for insertion

v[j] = v[j-1];

--j;

} // Location is found; insert temp

v[j] = temp;

}

}

Page 31: 1 Container Types Container Types Sequence Containers Sequence Containers Associative Containers Associative Containers Adapter Classes Adapter Classes

31

Class TemplatesClass Templates Can templatize classes as well as functions All container classes in STL are templates Syntax

template <typename T1,

typename T2, … >

class ClassName

{ … } Concrete Store <T> template example

Page 32: 1 Container Types Container Types Sequence Containers Sequence Containers Associative Containers Associative Containers Adapter Classes Adapter Classes

32

template <typename T>class Store {public:

// Ctor: init w/item or default TStore (const T& item = T())

: m_value (item) { }

  T getValue () const { return m_value;

}

Class Template StoreClass Template Store

Page 33: 1 Container Types Container Types Sequence Containers Sequence Containers Associative Containers Associative Containers Adapter Classes Adapter Classes

33

void setValue (const T& item) {m_value = item;

} private:T m_value;

};

Use:Store<double> s;s.setValue (4.3);

Class Template Store (Cont’d)Class Template Store (Cont’d)