The Standard Template Library Classes -...

33
The Standard Template Library Classes Lecture 37 Sections 9.7, 9.8 Robb T. Koether Hampden-Sydney College Wed, Apr 21, 2010 Robb T. Koether (Hampden-Sydney College) The Standard Template Library Classes Wed, Apr 21, 2010 1 / 33

Transcript of The Standard Template Library Classes -...

Page 1: The Standard Template Library Classes - people.hsc.edupeople.hsc.edu/faculty-staff/robbk/coms262/lectures/spring 2010/lecture...Outline 1 The Standard Template Library 2 The Container

The Standard Template Library ClassesLecture 37

Sections 9.7, 9.8

Robb T. Koether

Hampden-Sydney College

Wed, Apr 21, 2010

Robb T. Koether (Hampden-Sydney College) The Standard Template Library Classes Wed, Apr 21, 2010 1 / 33

Page 2: The Standard Template Library Classes - people.hsc.edupeople.hsc.edu/faculty-staff/robbk/coms262/lectures/spring 2010/lecture...Outline 1 The Standard Template Library 2 The Container

Outline

1 The Standard Template Library

2 The Container Classes

3 The vector Class

4 The stack Class

5 The map Class

6 Assignment

Robb T. Koether (Hampden-Sydney College) The Standard Template Library Classes Wed, Apr 21, 2010 2 / 33

Page 3: The Standard Template Library Classes - people.hsc.edupeople.hsc.edu/faculty-staff/robbk/coms262/lectures/spring 2010/lecture...Outline 1 The Standard Template Library 2 The Container

Outline

1 The Standard Template Library

2 The Container Classes

3 The vector Class

4 The stack Class

5 The map Class

6 Assignment

Robb T. Koether (Hampden-Sydney College) The Standard Template Library Classes Wed, Apr 21, 2010 3 / 33

Page 4: The Standard Template Library Classes - people.hsc.edupeople.hsc.edu/faculty-staff/robbk/coms262/lectures/spring 2010/lecture...Outline 1 The Standard Template Library 2 The Container

The Standard Template Library

The Standard Template Library (STL) was added to the C++standard in 1994.It contains

I Container classes - Objects that hold collections of objects.I Iterators - Objects that iterate through containers.I Generic algorithms - Objects that perform standard procedures on

objects.

Robb T. Koether (Hampden-Sydney College) The Standard Template Library Classes Wed, Apr 21, 2010 4 / 33

Page 5: The Standard Template Library Classes - people.hsc.edupeople.hsc.edu/faculty-staff/robbk/coms262/lectures/spring 2010/lecture...Outline 1 The Standard Template Library 2 The Container

Outline

1 The Standard Template Library

2 The Container Classes

3 The vector Class

4 The stack Class

5 The map Class

6 Assignment

Robb T. Koether (Hampden-Sydney College) The Standard Template Library Classes Wed, Apr 21, 2010 5 / 33

Page 6: The Standard Template Library Classes - people.hsc.edupeople.hsc.edu/faculty-staff/robbk/coms262/lectures/spring 2010/lecture...Outline 1 The Standard Template Library 2 The Container

The Container Classes

The basic container classes areI vectorI deque (double-ended queue)I list

The adaptor classes use container classes.The adaptor classes are

I stackI queueI priority_queue

Robb T. Koether (Hampden-Sydney College) The Standard Template Library Classes Wed, Apr 21, 2010 6 / 33

Page 7: The Standard Template Library Classes - people.hsc.edupeople.hsc.edu/faculty-staff/robbk/coms262/lectures/spring 2010/lecture...Outline 1 The Standard Template Library 2 The Container

The Container Classes

Other container classesI setI multisetI mapI multimapI bitset

Robb T. Koether (Hampden-Sydney College) The Standard Template Library Classes Wed, Apr 21, 2010 7 / 33

Page 8: The Standard Template Library Classes - people.hsc.edupeople.hsc.edu/faculty-staff/robbk/coms262/lectures/spring 2010/lecture...Outline 1 The Standard Template Library 2 The Container

The Container Classes

Visit the websitehttp://www.cplusplus.com/reference/

for a full description of the STL.

Robb T. Koether (Hampden-Sydney College) The Standard Template Library Classes Wed, Apr 21, 2010 8 / 33

Page 9: The Standard Template Library Classes - people.hsc.edupeople.hsc.edu/faculty-staff/robbk/coms262/lectures/spring 2010/lecture...Outline 1 The Standard Template Library 2 The Container

Outline

1 The Standard Template Library

2 The Container Classes

3 The vector Class

4 The stack Class

5 The map Class

6 Assignment

Robb T. Koether (Hampden-Sydney College) The Standard Template Library Classes Wed, Apr 21, 2010 9 / 33

Page 10: The Standard Template Library Classes - people.hsc.edupeople.hsc.edu/faculty-staff/robbk/coms262/lectures/spring 2010/lecture...Outline 1 The Standard Template Library 2 The Container

The vector Container Class

vector Constructorsvector();vector(vector& v);vector(size_type sz, T& value);vector(iterator first, iterator last);

vector() – Constructs the default constructor.vector(vector) – Constructs the copy constructor.vector(sz, value) – Constructs a vector of size sz, filledwith value.vector(first, last) – Constructs a vector with range ofvalues given by the iterators first and last.We will use the vector class as an example.

Robb T. Koether (Hampden-Sydney College) The Standard Template Library Classes Wed, Apr 21, 2010 10 / 33

Page 11: The Standard Template Library Classes - people.hsc.edupeople.hsc.edu/faculty-staff/robbk/coms262/lectures/spring 2010/lecture...Outline 1 The Standard Template Library 2 The Container

The vector Container Class

The Assignment Operatorvector& operator=(const vector& v);

operator=() – Assigns one vector to another.

Robb T. Koether (Hampden-Sydney College) The Standard Template Library Classes Wed, Apr 21, 2010 11 / 33

Page 12: The Standard Template Library Classes - people.hsc.edupeople.hsc.edu/faculty-staff/robbk/coms262/lectures/spring 2010/lecture...Outline 1 The Standard Template Library 2 The Container

The vector Container Class

The Capacity Functionssize_type size() const;size_type max_size() const;void resize(size_type sz, T value);size_type capacity() const;bool empty() const;void reserve(size_type cap);

size() – Returns the number of element in the vector.max_size() – Returns the maximum size possible.resize() – Changes the size to sz, filling in with value.capacity() – Returns current capacity.empty() – Determines whether the vector is empty.reserve() – Sets the capacity to cap.

Robb T. Koether (Hampden-Sydney College) The Standard Template Library Classes Wed, Apr 21, 2010 12 / 33

Page 13: The Standard Template Library Classes - people.hsc.edupeople.hsc.edu/faculty-staff/robbk/coms262/lectures/spring 2010/lecture...Outline 1 The Standard Template Library 2 The Container

The vector Container Class

Element Access Functionsreference operator[](size_type i);reference at(size_type i);reference front();reference back();

operator[]() – Returns the element in position i.at() – Same as operator[](i), but with range checking.front() – Returns the element in the first position.back() – Returns the element in the last position.

Robb T. Koether (Hampden-Sydney College) The Standard Template Library Classes Wed, Apr 21, 2010 13 / 33

Page 14: The Standard Template Library Classes - people.hsc.edupeople.hsc.edu/faculty-staff/robbk/coms262/lectures/spring 2010/lecture...Outline 1 The Standard Template Library 2 The Container

The vector Container Class

Mutator Functionsvoid assign(size_type n, const T& value);void assign(iterator first, iterator last);void push_back(const T& value);void pop_back();

assign(n, value) – Replaces the contents with n copies ofvalue.assign(begin, end) – Replaces the contents with the rangeof values from begin to end.push_back(value) – Appends value to the end of the vector.pop_back() – Removes the last element.

Robb T. Koether (Hampden-Sydney College) The Standard Template Library Classes Wed, Apr 21, 2010 14 / 33

Page 15: The Standard Template Library Classes - people.hsc.edupeople.hsc.edu/faculty-staff/robbk/coms262/lectures/spring 2010/lecture...Outline 1 The Standard Template Library 2 The Container

The vector Container Class

Mutator Functionsiterator insert(iterator it, const T& value);void insert(iterator it, size_type n,

const T& value);void insert(iterator it, iterator first,

iterator last);

insert(it, value) – Inserts value in position given by theiterator it.insert(it, n, value) – Inserts n copies of value starting inposition given by the iterator it.insert(it, first, last) – Starting in position given byiterator it, inserts values in range given by iterators first andlast.

Robb T. Koether (Hampden-Sydney College) The Standard Template Library Classes Wed, Apr 21, 2010 15 / 33

Page 16: The Standard Template Library Classes - people.hsc.edupeople.hsc.edu/faculty-staff/robbk/coms262/lectures/spring 2010/lecture...Outline 1 The Standard Template Library 2 The Container

The vector Container Class

Mutator Functionsiterator erase(iterator it);iterator erase(iterator first, iterator last);void swap(vector& v);void clear();

erase(it) – Removes element in position given by the iteratorit.erase(first, last) – Removes range of elements given bythe iterators first and last.swap() – Swaps this vector with the given vector.clear() – Removes all elements.

Robb T. Koether (Hampden-Sydney College) The Standard Template Library Classes Wed, Apr 21, 2010 16 / 33

Page 17: The Standard Template Library Classes - people.hsc.edupeople.hsc.edu/faculty-staff/robbk/coms262/lectures/spring 2010/lecture...Outline 1 The Standard Template Library 2 The Container

The vector Container Class

iterator Functionsiterator begin();iterator end();reverse_iterator rbegin();reverse_iterator rend();

begin() – Returns iterator set to beginning.end() – Returns iterator set to end.rbegin() – Returns reverse iterator set “reverse beginning.”rend() – Returns reverse iterator set to “reverse end.”

Robb T. Koether (Hampden-Sydney College) The Standard Template Library Classes Wed, Apr 21, 2010 17 / 33

Page 18: The Standard Template Library Classes - people.hsc.edupeople.hsc.edu/faculty-staff/robbk/coms262/lectures/spring 2010/lecture...Outline 1 The Standard Template Library 2 The Container

The vector Container Class

Example (Programming with vectors)Write a program that creates a vector of ints, adds some ints toit, and and then prints the list.

Robb T. Koether (Hampden-Sydney College) The Standard Template Library Classes Wed, Apr 21, 2010 18 / 33

Page 19: The Standard Template Library Classes - people.hsc.edupeople.hsc.edu/faculty-staff/robbk/coms262/lectures/spring 2010/lecture...Outline 1 The Standard Template Library 2 The Container

The vector Container Class

Example (Programming with vectors)#include <vector>int main(){

vector<int> v;v.push_back(10);v.push_back(20);v.push_back(30);vector<int>::iterator it;for (it = v.begin(); it != v.end(); it++)

cout << *it << endl;}

Robb T. Koether (Hampden-Sydney College) The Standard Template Library Classes Wed, Apr 21, 2010 19 / 33

Page 20: The Standard Template Library Classes - people.hsc.edupeople.hsc.edu/faculty-staff/robbk/coms262/lectures/spring 2010/lecture...Outline 1 The Standard Template Library 2 The Container

Example

Test the vector ClassThe test program STLVectorTest.cpp.The executable STLVectorTest.exe.

Robb T. Koether (Hampden-Sydney College) The Standard Template Library Classes Wed, Apr 21, 2010 20 / 33

Page 21: The Standard Template Library Classes - people.hsc.edupeople.hsc.edu/faculty-staff/robbk/coms262/lectures/spring 2010/lecture...Outline 1 The Standard Template Library 2 The Container

The stack Adaptor Class

An adaptor class uses a container class.We may construct a stack in any of the following ways.

Ways to Construct a Stack#include <stack>int main(){

stack<int> s1;stack<int, vector<int> > s2;stack<int, deque<int> > s3;stack<int, list<int> > s4;

}

Robb T. Koether (Hampden-Sydney College) The Standard Template Library Classes Wed, Apr 21, 2010 21 / 33

Page 22: The Standard Template Library Classes - people.hsc.edupeople.hsc.edu/faculty-staff/robbk/coms262/lectures/spring 2010/lecture...Outline 1 The Standard Template Library 2 The Container

Outline

1 The Standard Template Library

2 The Container Classes

3 The vector Class

4 The stack Class

5 The map Class

6 Assignment

Robb T. Koether (Hampden-Sydney College) The Standard Template Library Classes Wed, Apr 21, 2010 22 / 33

Page 23: The Standard Template Library Classes - people.hsc.edupeople.hsc.edu/faculty-staff/robbk/coms262/lectures/spring 2010/lecture...Outline 1 The Standard Template Library 2 The Container

The stack Adaptor Class

The stack class has the following member functions (besides thefundamental four).

stack Member Functionsbool empty() const;int size() const;T& top();void push(const T& value);void pop();

Robb T. Koether (Hampden-Sydney College) The Standard Template Library Classes Wed, Apr 21, 2010 23 / 33

Page 24: The Standard Template Library Classes - people.hsc.edupeople.hsc.edu/faculty-staff/robbk/coms262/lectures/spring 2010/lecture...Outline 1 The Standard Template Library 2 The Container

Outline

1 The Standard Template Library

2 The Container Classes

3 The vector Class

4 The stack Class

5 The map Class

6 Assignment

Robb T. Koether (Hampden-Sydney College) The Standard Template Library Classes Wed, Apr 21, 2010 24 / 33

Page 25: The Standard Template Library Classes - people.hsc.edupeople.hsc.edu/faculty-staff/robbk/coms262/lectures/spring 2010/lecture...Outline 1 The Standard Template Library 2 The Container

The map Container Class

A map is an associative list.Each member has

I A key.I A value.

The key must be unique for that member.The value is accessed through the key, by matching the key.This sounds like a hash table.

Robb T. Koether (Hampden-Sydney College) The Standard Template Library Classes Wed, Apr 21, 2010 25 / 33

Page 26: The Standard Template Library Classes - people.hsc.edupeople.hsc.edu/faculty-staff/robbk/coms262/lectures/spring 2010/lecture...Outline 1 The Standard Template Library 2 The Container

The map Container Class

Suppose we want to store a list of students and their declaredmajors.

Name MajorJohn MathematicsTim Computer ScienceBetty ChemistryAnn Mathematics

Robb T. Koether (Hampden-Sydney College) The Standard Template Library Classes Wed, Apr 21, 2010 26 / 33

Page 27: The Standard Template Library Classes - people.hsc.edupeople.hsc.edu/faculty-staff/robbk/coms262/lectures/spring 2010/lecture...Outline 1 The Standard Template Library 2 The Container

The map Container Class

If we intend to locate members by name, thenI The name is the keyI The major is the value.

We construct the (empty) map:

Construct a map#include <map>map<string, string> major;

Robb T. Koether (Hampden-Sydney College) The Standard Template Library Classes Wed, Apr 21, 2010 27 / 33

Page 28: The Standard Template Library Classes - people.hsc.edupeople.hsc.edu/faculty-staff/robbk/coms262/lectures/spring 2010/lecture...Outline 1 The Standard Template Library 2 The Container

The map Container Class

To add the data, we may use the subscript operator:

Initialize the mapmajor["John"] = "Mathematics";major["Tim"] = "Computer Science";major["Betty"] = "Chemistry";major["Ann"] = "Mathematics";

Robb T. Koether (Hampden-Sydney College) The Standard Template Library Classes Wed, Apr 21, 2010 28 / 33

Page 29: The Standard Template Library Classes - people.hsc.edupeople.hsc.edu/faculty-staff/robbk/coms262/lectures/spring 2010/lecture...Outline 1 The Standard Template Library 2 The Container

The map Container Class

To find "John", we use the find() function.It returns an iterator to John’s location in the map.

Search the mapmap<string, string>::iterator it;it = major.find("John");

Robb T. Koether (Hampden-Sydney College) The Standard Template Library Classes Wed, Apr 21, 2010 29 / 33

Page 30: The Standard Template Library Classes - people.hsc.edupeople.hsc.edu/faculty-staff/robbk/coms262/lectures/spring 2010/lecture...Outline 1 The Standard Template Library 2 The Container

The map Container Class

The data members first and second store the key and the value.

Print the mapmap<string, string>::iterator it;for (it = major.begin(); it != major.end(); it++)

cout << it.first << " is majoring in "<< it.second << endl;

Robb T. Koether (Hampden-Sydney College) The Standard Template Library Classes Wed, Apr 21, 2010 30 / 33

Page 31: The Standard Template Library Classes - people.hsc.edupeople.hsc.edu/faculty-staff/robbk/coms262/lectures/spring 2010/lecture...Outline 1 The Standard Template Library 2 The Container

The map Container Class

Test the map ClassThe test program STLMapTest.cpp.The executable STLMapTest.exe.

Robb T. Koether (Hampden-Sydney College) The Standard Template Library Classes Wed, Apr 21, 2010 31 / 33

Page 32: The Standard Template Library Classes - people.hsc.edupeople.hsc.edu/faculty-staff/robbk/coms262/lectures/spring 2010/lecture...Outline 1 The Standard Template Library 2 The Container

Outline

1 The Standard Template Library

2 The Container Classes

3 The vector Class

4 The stack Class

5 The map Class

6 Assignment

Robb T. Koether (Hampden-Sydney College) The Standard Template Library Classes Wed, Apr 21, 2010 32 / 33

Page 33: The Standard Template Library Classes - people.hsc.edupeople.hsc.edu/faculty-staff/robbk/coms262/lectures/spring 2010/lecture...Outline 1 The Standard Template Library 2 The Container

Assignment

HomeworkRead Section 9.7, pages 503 - 510.Read Section 9.8, pages 511 - 515.

Robb T. Koether (Hampden-Sydney College) The Standard Template Library Classes Wed, Apr 21, 2010 33 / 33