AMS 595: Programming
Languages and C++
5: Standard Template Library
C++ Programming: From Problem Analysis to
Program Design, Third Edition
1
Outline
1.
STL
2.
Vectors
3.
Examples
2
Problem solving often requires information be viewed as a list
n
List may be onedimensional or multidimensional
C++ provides two list mechanisms
n
Arrays
w
Traditional and important because of legacy libraries
w
Restrictions on its use
n
Container classes
w
Firstclass list representation
w
Common containers provided by STL
n
Vector, queue, stack, map, …
w
Preferred longterm programming practice
Lists
Vectors are a firstclass mechanism for representing lists
4
Standard Template Library (STL)
•
Defines powerful, reusable components
−
That implement common data structures and algorithms
−
Containers: data structures that store objects of any type
−
Iterators: used to manipulate container elements
−
Algorithms: searching, sorting and many others
Sequence containers:

linear data structures such as vectors and linked lists
Associative containers:

nonlinear containers such as hash tables
Container adapters:

constrained sequence containers such as stacks and
queues
5
Sequence Containers
•
STL provides three sequence containers

vector:
based on arrays

deque (doubleended queue): based on arrays

list: based on linked lists
6
Sequence Containers:
vector
•
List representation that is mostly comparable in
performance to arrays
−
The implementation of a vector is based on arrays
•
Direct access to any element via indexes
n
Indices are in the range 0 … size of list – 1
•
List size is dynamic
n
Can add items as we need them (and remove them too)
n
Insertion at the end is normally efficient.
n
The vector simply grows
•
Insertion and deletion in the middle is expensive
−
An entire portion of the vector needs to be moved
Example
#include <vector>
#include <iostream>
using namespace std;
int main() {
vector<int> A(4, 0);
// A: 0 0 0 0
A.resize(8, 2);
// A: 0 0 0 0 2 2 2 2
vector<int> B(3, 1);
// B: 1 1 1
for (int i = 0; i < B.size(); ++i) {
A[i] = B[i] + 2;
}
// A: 3 3 3 0 2 2 2 2
A = B;
// A: 1 1 1
return 0;
}
Vector Construction
•
vector()
−
The default constructor creates a vector of
zero length
•
vector(size_type n, const T &val =
T())
−
Explicit
constructor creates a vector of length
n
with each element initialized to
val
•
vector(const T &V)
−
The copy constructor creates a vector that is a
duplicate of vector
V
.
•
Shallow copy!
Construction
•
Basic construction
vector<T> List;
•
Example
vector<int> A;
// 0 ints
vector<float> B;
// 0 floats
vector<Rational> C;
// 0 Rationals
Base element type
Container name
Construction
•
Basic construction
vector<T> List(SizeExpression);
•
Example
vector<int> A(10);
// 10 ints
vector<float> B(20);
// 20 floats
vector<Rational> C(5);
// 5 Rationals
int n = PromptAndRead();
vector<int> D(n);
// n ints
Base element type
Container name
Number of
elements to be
default
constructed
Construction
•
Basic construction
vector<T> List(SizeExpression, Value);
•
Example
vector<int> A(10, 3);
// 10 3s
vector<float> B(20, 0.2);
// 20 0.2s
Rational r(2/3);
vector<Rational> C(5, r);
// 5 2/3s
Base element type
Container name
Number of
elements to be
default
constructed
Initial value
You've reached the end of your free preview.
Want to read all 53 pages?
 Fall '08
 Staff
 Val, Standard Template Library, Vector Construction