Programming Abstraction in C++: Eric S. Roberts and Julie Zelenski
Programming Abstraction in C++: Eric S. Roberts and Julie Zelenski
Stanford University
2010
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
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Introduction
Introduction
Introduction
Seven classes:
Vector, Grid, Stack, Queue, Map, Lexicon, Scanner.
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
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Vector class
#include "vector.h"
Constructor
Vector<int> vec;
Constructor
Vector<int> vec;
Constructor
Vector<int> vec;
Idiom
Idiom
Question:
Can you pass vec by value (without the ampersand)? If you
can, what are the differences?
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Passing by reference
Passing by reference
Question:
Can you pass vec by value (without the ampersand)? If you
can, what are the differences?
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Passing by reference
Question:
Can you pass vec by value (without the ampersand)? If you
can, what are the differences?
Almost always pass classes by reference.
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Idiom
Idiom
Outline
1 Vector Class
2 Grid Class
3 Stack Class
4 Queue Class
5 Map Class
6 Lexicon Class
7 Scanner Class
8 Iterators
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Grid class
Constructor
Grid<double> matrix(3,2);
Example
check rows
check columns
check diagonal
check antidiagonal
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
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 to
the client.
Fundamental operations: push, pop
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 to
the client.
Fundamental operations: push, pop
main() {
call function F
}
function F() {
call function G
}
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
main
Constructor
Stack<double> calculator;
Constructor
Stack<double> calculator;
Example
Example
Example
Outline
1 Vector Class
2 Grid Class
3 Stack Class
4 Queue Class
5 Map Class
6 Lexicon Class
7 Scanner Class
8 Iterators
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 are
accessible to the client.
Fundamental operations: enqueue, dequeue
Constructor
Queue<int> queue;
Example
Simulating time.
Parameter: SIMULATION TIME
Implementation:
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();
}
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
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 an
associated value (can be a complicated structure). A
generalization of Vector.
Fundamental operations: put, get
Map class
Behavior. An association between a key (tag) and an
associated value (can be a complicated structure). A
generalization of Vector.
Fundamental operations: put, get
Constructor
Map<double> symbolTable;
Map class
Behavior. An association between a key (tag) and an
associated value (can be a complicated structure). A
generalization of Vector.
Fundamental operations: put, get
Constructor
Map<double> symbolTable;
Map class
Behavior. An association between a key (tag) and an
associated value (can be a complicated structure). A
generalization of Vector.
Fundamental operations: put, get
Constructor
Map<double> symbolTable;
Outline
1 Vector Class
2 Grid Class
3 Stack Class
4 Queue Class
5 Map Class
6 Lexicon Class
7 Scanner Class
8 Iterators
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Lexicon class
Lexicon class
Constructors
Lexicon wordList;
Lexicon english("EnglishWords.dat");
Outline
1 Vector Class
2 Grid Class
3 Stack Class
4 Queue Class
5 Map Class
6 Lexicon Class
7 Scanner Class
8 Iterators
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Scanner class
Constructor
Scanner scanner;
Idiom
infile.close();
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
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
Iterators
Iterators (cont.)
foreach mechanism
Usage
Idiom: foreach
foreach (string word in english) {
if (word.length() == 2) {
cout << word << endl;
}
}
Vector Class Grid Class Stack Class Queue Class Map Class Lexicon Class Scanner Class Iterators
foreach mechanism
Usage
Idiom: foreach
foreach (string word in english) {
if (word.length() == 2) {
cout << word << endl;
}
}