the standard template library classespeople.hsc.edu/faculty-staff/robbk/coms262/lectures/spring...

31
The Standard Template Library Classes Lecture 35 Sections 9.7, 9.8 Robb T. Koether Hampden-Sydney College Mon, Apr 23, 2018 Robb T. Koether (Hampden-Sydney College) The Standard Template Library Classes Mon, Apr 23, 2018 1 / 31

Upload: others

Post on 13-Oct-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: The Standard Template Library Classespeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Standard Template Library Classes Lecture 35 Sections 9.7, 9.8 Robb

The Standard Template Library ClassesLecture 35

Sections 9.7, 9.8

Robb T. Koether

Hampden-Sydney College

Mon, Apr 23, 2018

Robb T. Koether (Hampden-Sydney College) The Standard Template Library Classes Mon, Apr 23, 2018 1 / 31

Page 2: The Standard Template Library Classespeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Standard Template Library Classes Lecture 35 Sections 9.7, 9.8 Robb

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 Mon, Apr 23, 2018 2 / 31

Page 3: The Standard Template Library Classespeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Standard Template Library Classes Lecture 35 Sections 9.7, 9.8 Robb

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 Mon, Apr 23, 2018 3 / 31

Page 4: The Standard Template Library Classespeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Standard Template Library Classes Lecture 35 Sections 9.7, 9.8 Robb

The Standard Template Library

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

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

Robb T. Koether (Hampden-Sydney College) The Standard Template Library Classes Mon, Apr 23, 2018 4 / 31

Page 5: The Standard Template Library Classespeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Standard Template Library Classes Lecture 35 Sections 9.7, 9.8 Robb

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 Mon, Apr 23, 2018 5 / 31

Page 6: The Standard Template Library Classespeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Standard Template Library Classes Lecture 35 Sections 9.7, 9.8 Robb

The Container Classes

The basic container classes arevectordeque (double-ended queue)list

The adaptor classes use container classes.The adaptor classes are

stackqueuepriority_queue

Robb T. Koether (Hampden-Sydney College) The Standard Template Library Classes Mon, Apr 23, 2018 6 / 31

Page 7: The Standard Template Library Classespeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Standard Template Library Classes Lecture 35 Sections 9.7, 9.8 Robb

The Container Classes

Other container classessetmultisetmapmultimapbitset

Robb T. Koether (Hampden-Sydney College) The Standard Template Library Classes Mon, Apr 23, 2018 7 / 31

Page 8: The Standard Template Library Classespeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Standard Template Library Classes Lecture 35 Sections 9.7, 9.8 Robb

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 Mon, Apr 23, 2018 8 / 31

Page 9: The Standard Template Library Classespeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Standard Template Library Classes Lecture 35 Sections 9.7, 9.8 Robb

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 Mon, Apr 23, 2018 9 / 31

Page 10: The Standard Template Library Classespeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Standard Template Library Classes Lecture 35 Sections 9.7, 9.8 Robb

The vector Container Class

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

vector() – Constructs the default vector.vector(vector) – Constructs the copy vector.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 Mon, Apr 23, 2018 10 / 31

Page 11: The Standard Template Library Classespeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Standard Template Library Classes Lecture 35 Sections 9.7, 9.8 Robb

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 Mon, Apr 23, 2018 11 / 31

Page 12: The Standard Template Library Classespeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Standard Template Library Classes Lecture 35 Sections 9.7, 9.8 Robb

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 Mon, Apr 23, 2018 12 / 31

Page 13: The Standard Template Library Classespeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Standard Template Library Classes Lecture 35 Sections 9.7, 9.8 Robb

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 Mon, Apr 23, 2018 13 / 31

Page 14: The Standard Template Library Classespeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Standard Template Library Classes Lecture 35 Sections 9.7, 9.8 Robb

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(first, last) – Replaces the contents with the rangeof values from first to last.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 Mon, Apr 23, 2018 14 / 31

Page 15: The Standard Template Library Classespeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Standard Template Library Classes Lecture 35 Sections 9.7, 9.8 Robb

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 Mon, Apr 23, 2018 15 / 31

Page 16: The Standard Template Library Classespeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Standard Template Library Classes Lecture 35 Sections 9.7, 9.8 Robb

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 Mon, Apr 23, 2018 16 / 31

Page 17: The Standard Template Library Classespeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Standard Template Library Classes Lecture 35 Sections 9.7, 9.8 Robb

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 Mon, Apr 23, 2018 17 / 31

Page 18: The Standard Template Library Classespeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Standard Template Library Classes Lecture 35 Sections 9.7, 9.8 Robb

The vector Container Class

Programming with vectorsWrite 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 Mon, Apr 23, 2018 18 / 31

Page 19: The Standard Template Library Classespeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Standard Template Library Classes Lecture 35 Sections 9.7, 9.8 Robb

The vector Container Class

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

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

cout << *it << endl;}

Robb T. Koether (Hampden-Sydney College) The Standard Template Library Classes Mon, Apr 23, 2018 19 / 31

Page 20: The Standard Template Library Classespeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Standard Template Library Classes Lecture 35 Sections 9.7, 9.8 Robb

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 Mon, Apr 23, 2018 20 / 31

Page 21: The Standard Template Library Classespeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Standard Template Library Classes Lecture 35 Sections 9.7, 9.8 Robb

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 Mon, Apr 23, 2018 21 / 31

Page 22: The Standard Template Library Classespeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Standard Template Library Classes Lecture 35 Sections 9.7, 9.8 Robb

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 Mon, Apr 23, 2018 22 / 31

Page 23: The Standard Template Library Classespeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Standard Template Library Classes Lecture 35 Sections 9.7, 9.8 Robb

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 Mon, Apr 23, 2018 23 / 31

Page 24: The Standard Template Library Classespeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Standard Template Library Classes Lecture 35 Sections 9.7, 9.8 Robb

The map Container Class

A map is an associative list.Each member has

A key.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 Mon, Apr 23, 2018 24 / 31

Page 25: The Standard Template Library Classespeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Standard Template Library Classes Lecture 35 Sections 9.7, 9.8 Robb

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 Mon, Apr 23, 2018 25 / 31

Page 26: The Standard Template Library Classespeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Standard Template Library Classes Lecture 35 Sections 9.7, 9.8 Robb

The map Container Class

If we intend to locate members by name, thenThe name is the keyThe 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 Mon, Apr 23, 2018 26 / 31

Page 27: The Standard Template Library Classespeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Standard Template Library Classes Lecture 35 Sections 9.7, 9.8 Robb

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 Mon, Apr 23, 2018 27 / 31

Page 28: The Standard Template Library Classespeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Standard Template Library Classes Lecture 35 Sections 9.7, 9.8 Robb

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 Mon, Apr 23, 2018 28 / 31

Page 29: The Standard Template Library Classespeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Standard Template Library Classes Lecture 35 Sections 9.7, 9.8 Robb

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 Mon, Apr 23, 2018 29 / 31

Page 30: The Standard Template Library Classespeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Standard Template Library Classes Lecture 35 Sections 9.7, 9.8 Robb

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 Mon, Apr 23, 2018 30 / 31

Page 31: The Standard Template Library Classespeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Standard Template Library Classes Lecture 35 Sections 9.7, 9.8 Robb

Assignment

AssignmentRead Sections 9.7 - 9.8.

Robb T. Koether (Hampden-Sydney College) The Standard Template Library Classes Mon, Apr 23, 2018 31 / 31