Standard Containers Vectors Adapted from Nyhoff ADTs Data

  • Slides: 18
Download presentation
Standard Containers: Vectors Adapted from Nyhoff, ADTs, Data Structures and Problem Solving with C++

Standard Containers: Vectors Adapted from Nyhoff, ADTs, Data Structures and Problem Solving with C++ 1

STL (Standard Template Library) A library of class and function templates Components: 1. Containers:

STL (Standard Template Library) A library of class and function templates Components: 1. Containers: Generic "off-the-shelf" class templates for storing collections of data 2. Algorithms: Generic "off-the-shelf" function templates for operating on containers 3. Iterators: Generalized "smart" pointers provide a generic way to access container elements 2

Standard Template Library • Example of a specific – container class – iterator –

Standard Template Library • Example of a specific – container class – iterator – algorithm 3

STL's 10 Containers Kind of Container Sequential: STL Containers deque, list, vector Associative: map,

STL's 10 Containers Kind of Container Sequential: STL Containers deque, list, vector Associative: map, multiset, set Adapters: priority_queue, stack 4

The vector Container • A type-independent pattern for an array class – capacity can

The vector Container • A type-independent pattern for an array class – capacity can expand – self contained • Declaration template <typename T> class vector {. . . } ; 5

The vector Container • Constructors vector<T> v, // empty vector v 1(100), // 100

The vector Container • Constructors vector<T> v, // empty vector v 1(100), // 100 elements of type T v 2(100, val), // 100 copies of val v 3(fptr, lptr); // contains copies of // elements in memory // locations fptr to lptr int. Array[5] = {9, 2, 7, 3, 12}; Int arr. Size = sizeof(int. Array)/sizeof(int); vector<int> int. Vector(int. Array, int. Array+arr. Size); 6

vector Operations • Information about a vector's contents – – v. size() v. empty()

vector Operations • Information about a vector's contents – – v. size() v. empty() v. capacity() v. reserve(n) • Adding, removing, accessing elements – – v. push_back(value) v. pop_back() v. front() v. back() 7

vector Operations • Assignment v 1 = v 2 • Swapping v 1. swap(v

vector Operations • Assignment v 1 = v 2 • Swapping v 1. swap(v 2) • Relational operators == implies element by element equality less than < behaves like string comparison 8

Increasing Capacity of a Vector • When vector v becomes full – capacity increased

Increasing Capacity of a Vector • When vector v becomes full – capacity increased automatically when item added • Algorithm to increase capacity of vector<T> – Allocate new array to store vector's elements (how big) – use T copy constructor to copy existing elements to new array (therefore your class must have copy constructor) – Store item being added in new array – Destroy old array in vector<T> – Make new array the vector<T>'s storage array Expansion by addition is possible but costly 9

Increasing Capacity of a Vector • Allocate new array – Capacity doubles when more

Increasing Capacity of a Vector • Allocate new array – Capacity doubles when more space needed • Elements copied to new array 10

Increasing Capacity of a Vector • Item being added now stored • Destroy old

Increasing Capacity of a Vector • Item being added now stored • Destroy old array • Make new array the vector's storage area 11

Iterators • A subscript operator is provided – BUT … this is not a

Iterators • A subscript operator is provided – BUT … this is not a generic way to access container elements • STL provides objects called iterators – can point at an element – can access the value within that element – can move from one element to another • They are independent of any particular container … thus a generic mechanism 12

Iterators • Given a vector which has had values placed in the first 4

Iterators • Given a vector which has had values placed in the first 4 locations: vector<int> v 9 v. begin() 4 15 3 v. end() • v. begin() will return the iterator value for the first slot, • v. end() for the next empty slot 13

Iterators • Each STL container declares an iterator type – can be used to

Iterators • Each STL container declares an iterator type – can be used to define iterator objects • To declare an iterator object – the identifier iterator must be preceded by • name of container • scope operator : : • Example: vector<int>: : iterator vec. Iter = v. begin() 14

Iterators • Basic operators that can be applied to iterators: – increment operator ++

Iterators • Basic operators that can be applied to iterators: – increment operator ++ – decrement operator -– dereferencing operator * – Assignment = – Addition, subtraction +, -, +=, -= vec. Iter + n returns iterator positioned n elements away – Subscript operator [ ] vec. Iter[n] returns reference to nth element from current position 15

Iterators Contrast use of subscript vs. use of iterator ostream & operator<<(ostream & out,

Iterators Contrast use of subscript vs. use of iterator ostream & operator<<(ostream & out, const vector<double> & v) { for (int i = 0; i < v. size(); i++) out << v[i] << " "; return out; } for (vector<double>: : iterator it = v. begin(); it != v. end(); it++) out << *it << " "; 16

Iterator Functions • Operators: ++, --, *, =. ==, !=, +, -, [ ]

Iterator Functions • Operators: ++, --, *, =. ==, !=, +, -, [ ] • Vector Functions: v. begin(), v. end(), v. rbegin(), v. rend(), v. insert(iter, value), v. insert(iter, n, value), v. erase(iter 1, iter 2) • Note the capability of the last two groupings – Possible to insert, erase elements of a vector anywhere in the vector – Must use iterators to do this – Note also these operations are as inefficient as for arrays due to the shifting required v. insert(iter, n, value) v. erase(iter 1, iter 2) 17

Contrast Vectors and Arrays Vectors • Capacity can increase Arrays • Fixed size, cannot

Contrast Vectors and Arrays Vectors • Capacity can increase Arrays • Fixed size, cannot be changed during execution (unless using dynamic alloc) • A self contained object • Is a class template • Has function members to do tasks • Cannot "operate" on itself • Must "re-invent the wheel" for most actions 18