Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack,...
Transcript of Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack,...
![Page 1: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/1.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Programming Abstraction in C++
Eric S. Roberts and Julie Zelenski
Stanford University2010
![Page 2: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/2.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Chapter 4. Using Abstract Data Types
![Page 3: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/3.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Outline
1 Vector Class
2 Grid Class
3 Stack Class
4 Queue Class
5 Map Class
6 Lexicon Class
7 Scanner Class
8 Iterators
![Page 4: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/4.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Introduction
Abstract data type (ADT): A type defined in terms of itsbehavior. (Rather than its representation, e.g., char isrepresented by codes.)
![Page 5: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/5.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Introduction
Abstract data type (ADT): A type defined in terms of itsbehavior. (Rather than its representation, e.g., char isrepresented by codes.)
Separating behavior from implementation
Simplicity. Hiding internal representation from the client.
Flexibility. Implementation can be changed as long as theinterface (behavior) remains the same.
Security. Protect the implementation from the client.
![Page 6: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/6.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Introduction
Abstract data type (ADT): A type defined in terms of itsbehavior. (Rather than its representation, e.g., char isrepresented by codes.)
Separating behavior from implementation
Simplicity. Hiding internal representation from the client.
Flexibility. Implementation can be changed as long as theinterface (behavior) remains the same.
Security. Protect the implementation from the client.
Seven classes:Vector, Grid, Stack, Queue, Map, Lexicon, Scanner.
![Page 7: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/7.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Outline
1 Vector Class
2 Grid Class
3 Stack Class
4 Queue Class
5 Map Class
6 Lexicon Class
7 Scanner Class
8 Iterators
![Page 8: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/8.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Vector class
A container class or collection class.Interface
#include "vector.h"
A naming convention. For example: grid.h, stack.h.
Generalization of one-dimensional array type
Variable size
Effective size available
Simple insert and delete
Bound checking
![Page 9: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/9.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Vector class (cont.)
Constructor
Vector<int> vec;
Specify the base type of a vector.
![Page 10: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/10.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Vector class (cont.)
Constructor
Vector<int> vec;
Specify the base type of a vector.
Methods. Table 4-1, p. 127.
Example.
vec.add(10), vec.removeAt(0).
![Page 11: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/11.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Vector class (cont.)
Constructor
Vector<int> vec;
Specify the base type of a vector.
Methods. Table 4-1, p. 127.
Example.
vec.add(10), vec.removeAt(0).
Question. How would you remove the last entry?
![Page 12: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/12.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Idiom
Idiom: Going through a vector, p. 129void PrintVector(Vector<int> & vec) {
cout << "[";for (int i = 0; i < vec.size(); i++) {
if (i > 0) cout << ", ";cout << vec[i];
}cout << "]" << endl;
}
Note. Passing by reference.
![Page 13: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/13.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Idiom
Idiom: Going through a vector, p. 129void PrintVector(Vector<int> & vec) {
cout << "[";for (int i = 0; i < vec.size(); i++) {
if (i > 0) cout << ", ";cout << vec[i];
}cout << "]" << endl;
}
Note. Passing by reference.
Question:
Can you pass vec by value (without the ampersand)? If youcan, what are the differences?
![Page 14: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/14.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Passing by reference
void AddArrayToVector(Vector<int> & vec,int array[], int n) {
for (int 1 = 0; i < n; i++) {vec.add(array[i]);
}}
![Page 15: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/15.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Passing by reference
void AddArrayToVector(Vector<int> & vec,int array[], int n) {
for (int 1 = 0; i < n; i++) {vec.add(array[i]);
}}
Question:
Can you pass vec by value (without the ampersand)? If youcan, what are the differences?
![Page 16: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/16.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Passing by reference
void AddArrayToVector(Vector<int> & vec,int array[], int n) {
for (int 1 = 0; i < n; i++) {vec.add(array[i]);
}}
Question:
Can you pass vec by value (without the ampersand)? If youcan, what are the differences?
Almost always pass classes by reference.
![Page 17: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/17.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Idiom
Idiom: Open a text file, p. 131void AskUserForInputFile(string promt,
ifstream & infile) {while (true) {
cout << prompt;string filename = GetLine();infile.open(filename.c_str());if (!infile.fail()) break;cout << "Unable to open " << filename << endl;infile.clear();
}}
Note. Don’t forget infile.close() after reading/writing.
![Page 18: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/18.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Idiom
Idiom: Open a text file, p. 131void AskUserForInputFile(string promt,
ifstream & infile) {while (true) {
cout << prompt;string filename = GetLine();infile.open(filename.c_str());if (!infile.fail()) break;cout << "Unable to open " << filename << endl;infile.clear();
}}
Note. Don’t forget infile.close() after reading/writing.
Study revfile.cpp, p. 130.
A text file as lines, an object of Vector<string>.
![Page 19: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/19.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Outline
1 Vector Class
2 Grid Class
3 Stack Class
4 Queue Class
5 Map Class
6 Lexicon Class
7 Scanner Class
8 Iterators
![Page 20: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/20.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Grid class
Generalization of two-dimensional array.
Variable dimensions.
Constructor
Grid<double> matrix(3,2);
Specify row and column dimensions, in addition to the basetype.
Methods. Table 4-2, p. 132
![Page 21: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/21.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Example
CheckForWin for the tic-tac-toe game, p. 133.
bool CheckForWin(Grid<char> & board, char mark) {for (int i = 0; i <3; i++) {
if (CheckLine(board, mark, i, 0, 0, 1)) return true;if (CheckLine(board, mark, 0, i, 1, 0)) return true;
}if (CheckLine(board, mark, 0, 0, 1, 1)) return true;return (CheckLine(board, mark, 2, 0, -1, 1));
}
check rows
check columns
check diagonal
check antidiagonal
![Page 22: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/22.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Outline
1 Vector Class
2 Grid Class
3 Stack Class
4 Queue Class
5 Map Class
6 Lexicon Class
7 Scanner Class
8 Iterators
![Page 23: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/23.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Stack class
Behavior: Last in, first out (LIFO). Only the top is accessible tothe client.
Fundamental operations: push, pop
![Page 24: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/24.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Stack class
Behavior: Last in, first out (LIFO). Only the top is accessible tothe client.
Fundamental operations: push, pop
Applications. Nested function calls:
main() {call function F
}
function F() {call function G
}
![Page 25: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/25.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Stack class (cont.)
Function G is called last and returns first.
main
local variables for F
local variables for G
![Page 26: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/26.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Stack class (cont.)
Constructor
Stack<double> calculator;
Specify a base type.
Methods. Table 4-3, p. 135.
![Page 27: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/27.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Stack class (cont.)
Constructor
Stack<double> calculator;
Specify a base type.
Methods. Table 4-3, p. 135.
Example. Scientific calculator (HP C-13)
50.0 * 1.5 + 3.8 / 2.0
Reverse Polish notation (RPN):
50.0 ENTER 1.5 * 3.8 ENTER 2.0 / +
![Page 28: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/28.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
RPN and stack
When the ENTER button is pressed, the previous value ispushed on a stack.
When an operator button is pressed
Pushing the previous value
Popping two values
Applying the operation to the two values
Pushing the result on the stack
![Page 29: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/29.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Example
50.0 ENTER 1.5 * 3.8 ENTER 2.0 / +
Stack content, p. 136.
![Page 30: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/30.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Example
50.0 ENTER 1.5 * 3.8 ENTER 2.0 / +
Stack content, p. 136.
Question. What is the key sequence for
50.0 * (1.5 + 3.8) / 2.0
Think the stack content.
![Page 31: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/31.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Example
50.0 ENTER 1.5 * 3.8 ENTER 2.0 / +
Stack content, p. 136.
Question. What is the key sequence for
50.0 * (1.5 + 3.8) / 2.0
Think the stack content.
An RPN calculator simulator, pp. 137–138.
![Page 32: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/32.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Outline
1 Vector Class
2 Grid Class
3 Stack Class
4 Queue Class
5 Map Class
6 Lexicon Class
7 Scanner Class
8 Iterators
![Page 33: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/33.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Queue class
Behavior. First in, first out (FIFO). Only the head and tail areaccessible to the client.
Fundamental operations: enqueue, dequeue
Constructor
Queue<int> queue;
Methods. Table 4-4, p. 139.
Application. Printer queue.
![Page 34: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/34.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Example
Check-out line simulation.
Models
Discretize time to serialize events.
Arrival process: Poisson distribution. Average probability ofa customer arriving in a particular time interval.Parameter: ARRIVAL PROBABILITYImplementation:RandomChance(ARRIVAL PROBABILITY)
Service time: Uniformly distributed within a range.Parameters: MIN SERVICE TIME, MAX SERVICE TIMEImplementation: RandomInteger(MIN SERVICE TIME,MAX SERVICE TIME)
![Page 35: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/35.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Check-out line simulation (cont.)
Simulating time.Parameter: SIMULATION TIMEImplementation:for (int t = 0; t < SIMULATION_TIME; t++) {
if (RandomChance(ARRIVAL_PROBABILITY)) {queue.enqueue(t);
}if (serviceTimeRemaining > 0) {
serviceTimeRemaining--;if (serviceTimeRemaining == 0) nServed++;
} else {totalWait = t - queue.dequeue();serviceTimeRemaining =RandomInteger(MIN_..., MAX_...);
}totalLength += queue.size();
}
![Page 36: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/36.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Outline
1 Vector Class
2 Grid Class
3 Stack Class
4 Queue Class
5 Map Class
6 Lexicon Class
7 Scanner Class
8 Iterators
![Page 37: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/37.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Map class
Behavior. An association between a key (tag) and anassociated value (can be a complicated structure). Ageneralization of Vector.
Fundamental operations: put, get
Application. Symbol table, an association between a variablename and its value.
![Page 38: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/38.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Map class
Behavior. An association between a key (tag) and anassociated value (can be a complicated structure). Ageneralization of Vector.
Fundamental operations: put, get
Application. Symbol table, an association between a variablename and its value.
Constructor
Map<double> symbolTable;
Note. The base type is the type of value, not tag.For simplicity, the type of tag is always string.
![Page 39: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/39.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Map class
Behavior. An association between a key (tag) and anassociated value (can be a complicated structure). Ageneralization of Vector.
Fundamental operations: put, get
Application. Symbol table, an association between a variablename and its value.
Constructor
Map<double> symbolTable;
Note. The base type is the type of value, not tag.For simplicity, the type of tag is always string.
Methods. Table 4-5, p.147.
![Page 40: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/40.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Map class
Behavior. An association between a key (tag) and anassociated value (can be a complicated structure). Ageneralization of Vector.
Fundamental operations: put, get
Application. Symbol table, an association between a variablename and its value.
Constructor
Map<double> symbolTable;
Note. The base type is the type of value, not tag.For simplicity, the type of tag is always string.
Methods. Table 4-5, p.147.
Example. Airport codes. Figure 4-6, p. 150.
![Page 41: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/41.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Outline
1 Vector Class
2 Grid Class
3 Stack Class
4 Queue Class
5 Map Class
6 Lexicon Class
7 Scanner Class
8 Iterators
![Page 42: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/42.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Lexicon class
Behavior. A list of alphabetically ordered words.
Fundamental operations: add, containsWord
![Page 43: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/43.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Lexicon class
Behavior. A list of alphabetically ordered words.
Fundamental operations: add, containsWord
Constructors
Lexicon wordList;Lexicon english("EnglishWords.dat");
Note. No parameterized type (always string)
Formats of the data file
text file, list of words, one word per line
precompiled data file
![Page 44: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/44.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Lexicon class (cont.)
Methods. Table 4-6, p. 152.
Example. twoletters.cpp, p. 153.Check every possible two-letter combinations (262), if it iscontained in EnglishWords.dat.
![Page 45: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/45.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Lexicon class (cont.)
Methods. Table 4-6, p. 152.
Example. twoletters.cpp, p. 153.Check every possible two-letter combinations (262), if it iscontained in EnglishWords.dat.
Why Lexicon now that we have Map?
![Page 46: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/46.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Lexicon class (cont.)
Methods. Table 4-6, p. 152.
Example. twoletters.cpp, p. 153.Check every possible two-letter combinations (262), if it iscontained in EnglishWords.dat.
Why Lexicon now that we have Map?
Efficiency.
![Page 47: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/47.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Outline
1 Vector Class
2 Grid Class
3 Stack Class
4 Queue Class
5 Map Class
6 Lexicon Class
7 Scanner Class
8 Iterators
![Page 48: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/48.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Scanner class
Behavior. Divide up a string into tokens
A sequence of consecutive alphanumeric characters, or
A single-character string consisting of a space orpunctuation mark.
Fundamental operation: hasMoreTokens, nextToken
Constructor
Scanner scanner;
No base type. (Always string.)
Methods. Table 4-7, p. 157.
![Page 49: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/49.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Idiom
Idiom: Scan a fileifstream infile;Scanner scanner;
AskUserForInputFile("Input file: ", infile);scanner.setInput(infile);while (scanner.hasMoreTokens()) {
string word = scanner.nextToken();... do something with the token ...
}
infile.close();
![Page 50: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/50.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Outline
1 Vector Class
2 Grid Class
3 Stack Class
4 Queue Class
5 Map Class
6 Lexicon Class
7 Scanner Class
8 Iterators
![Page 51: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/51.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Iterators
Iterator: A subclass (of Vector, Grid, Map, Lexicon,Scanner).
Behavior. Stepping through the elements of a collection class.
Fundamental operations: hasNext, next
![Page 52: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/52.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Iterators (cont.)
Idiom: iterator, p. 158
Lexicon::Iterator iter = english.iterator();while (iter.hasNext()) {
string word = iter.next();... code to work with the word ...
}
Lexicon::Iterator A subclass of Lexiconiter An object of the class Lexicon::Iteratoriter.next() Returns a value of type string (Lexicon) orbase type (Vector or Grid or Map).
![Page 53: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/53.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
foreach mechanism
Usage
Idiom: foreachforeach (string word in english) {
if (word.length() == 2) {cout << word << endl;
}}
![Page 54: Programming Abstraction in C++ › ~qiao › courses › cs2so3 › ... · Vector, Grid, Stack, Queue, Map, Lexicon, Scanner. Vector Class Grid Class Stack Class Queue Class Map Class](https://reader035.fdocuments.in/reader035/viewer/2022081400/5f0be1277e708231d432aab3/html5/thumbnails/54.jpg)
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
foreach mechanism
Usage
Idiom: foreachforeach (string word in english) {
if (word.length() == 2) {cout << word << endl;
}}
It is simple and easy to use, but you should understand themechanism. The type of word (string) must match the basetype of the class (Lexicon) of which english is an object.