Professional Documents
Culture Documents
Data Structures
in C++
Chapter 8
Tim Budd
Oregon State University
Corvallis, Oregon
USA
Vectors
Chapter 8
Outline { Chapter 8
Vectors
Idea of vector
Templates
{ Class templates
{ Function templates
Problems solved
using vectors
{ Sieve of Erastosthenes
{ Selection Sort
{ Merge Sort
{ Silly Sentence Generation
Summary of vector operations
The implementation
Vectors
Chapter 8
Vectors
Chapter 8
(and thus
Vectors
Chapter 8
Templates
Vectors
Chapter 8
// constructors
vector (unsigned int numberElements);
vector (unsigned int numberElements, T initialValue);
vector (const vector & source);
vector ();
// member functions
T
back ();
iterator begin ();
...
// operators
T & operator [ ] (unsigned int);
private: // data areas
unsigned int mySize;
unsigned int myCapacity
T
data;
g;
Vectors
Chapter 8
Vectors
Chapter 8
(unsigned int);
Vectors
Chapter 8
Naming
return mySize;
Vectors
Chapter 8
10
Function Templates
Functions can also be parameterized using
templates, as in the following:
template <class T> T max(T a, T b)
// return the maximum of a and b
f
if (a < b)
return b;
return a;
T temp = a;
a = b;
b = temp;
Vectors
Chapter 8
11
Vectors
Chapter 8
12
Another Example {
Selection Sort
template<class T>
void selectionSort(vector<T> & data)
// sort, in place, the vector argument
// into ascending order
if (top != largeposition)
swap(data, top, largeposition);
// inv: data[top .. n] is ordered
Vectors
Chapter 8
13
Merge Sort
36 8 9 14
@
@
2 3 5
Vectors
Chapter 8
14
In-Place Merge
input
start
center
end
#
#
#
2 3 5 7 9 12 3 6 8 9 14
result
start
end
#
#
2 3 3 5 6 7 8 9 9 12 14
Vectors
Chapter 8
15
@
R
@
7 3 3 2 9
?
@
R
@
7 3
3 6 7 1 2
3 2 9
?
?
3 6
R
@
7 1 2
7 3 3 2 9 3 6 7 1 2
Vectors
A
U
A
U
A
Chapter 8
16
A
AU
U
A
7 3 2 3 9 3 6 1 7 2
@
R
@
@
?
R?
@
3 7
@
2 3 9
R
@
?
?
2 3 3 7 9
@
R
@
@
R
@
3 6
@
R
@
?
R?
@
1 2 7
?
1 2 3 6 7
?
?
1 2 2 3 3 3 6 7 7 9
Vectors
Chapter 8
17
m sort(s.begin(), 0, s.size());
Vectors
Chapter 8
18
Complexity
Work at each
Number
level is linear
Vectors
Chapter 8
19
Picture of Complexity
n elements wide
3 2
7
A
AU
A
U
A
7 3 2 3 9 3 6 1 7 2
@
R
@
3 7
@
?
R?
@
@
R
@
2 3 9
?
?
2 3 3 7 9
@
R
@
R
@
3 6
@
R
@
@
?
R?
@
1 2 7
?
?
1 2 3 6 7
log n
calls
deep
?
?
1 2 2 3 3 3 6 7 7 9
Vectors
Chapter 8
20
Vectors
Chapter 8
21
Chapter 8
22
Generating Sentences
Example Output
Chapter 8
23
Matrices
Vectors
Chapter 8
Vector Operations
Vectors
24
Chapter 8
Constructors
vector<T> v;
vector<T> v (int);
vector<T> v (int, T);
vector<T> v (aVector);
Element Access
25
default constructor
initialized with explicit size
size and initial value
copy constructor
v[i]
v.front ()
v.back ()
subscript access
rst value in collection
last value in collection
v.pop back ()
v.erase(iterator)
v.erase(iterator, iterator)
v.capacity ()
v.size ()
v.resize (unsigned, T)
v.reserve (unsigned)
v.empty ()
vector<T>::iterator itr
v.begin ()
v.end ()
Insertion
Removal
Size
Iterators
Vectors
Chapter 8
26
Sizes of Vector
@ ?@ ?
?
?
@
@
? @? @
Vectors
Chapter 8
27
transform elements using unary function from source, placing into destination
find (iterator start, iterator stop, value)
Vectors
Chapter 8
28
Vectors
Chapter 8
29
Vector Implementation
Like string,
Maintains
implementation is simpler
than the actual commercial implementations,
which are properitary)
Vectors
Chapter 8
30
Inline Denitions
// constructors
vector () f buer = 0; resize(0); g
vector (unsigned int size) f buer = 0; resize(size); g
vector (unsigned int size, T initial);
vector (vector & v);
vector () f delete buer; g
// member functions
T
back () f assert(! empty()); return buer[mySize ? 1];g
iterator begin () f return buer; g
int
capacity () f return myCapacity; g
bool
empty () f return mySize == 0; g
iterator end () f return begin() + mySize; g
T
front () f assert(! empty()); return buer[0]; g
void
pop back () f assert(! empty()); mySize??; g
void
push back (T value);
void
reserve (unsigned int newCapacity);
void
resize (unsigned int newSize)
f reserve(newSize); mySize = newSize; g
int
size () f return mySize; g
// operators
T & operator [ ] (unsigned int index)
f assert(index < mySize); return buer[index]; g
private:
unsigned int mySize;
unsigned int myCapacity;
T buer;
g;
Vectors
Chapter 8
31
Constructors
buer = 0;
resize(size);
// use ll algorithm to initialize each
ll (begin(), end(), initial);
buer = 0;
resize(size);
// use copy algorithm to initialize
copy (v.begin(), v.end(), begin());
Vectors
Chapter 8
32
if (buer == 0) f
mySize = 0;
myCapaicty = 0;
Vectors
Chapter 8
33
Implementing Generic
Algorithms
Vectors
Chapter 8