Standard Containers Vectors Adapted from Nyhoff ADTs Data
- Slides: 18
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: 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 – algorithm 3
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 expand – self contained • Declaration template <typename T> class vector {. . . } ; 5
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() 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 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 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 space needed • Elements copied to new array 10
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 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 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 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 ++ – 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, 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: ++, --, *, =. ==, !=, +, -, [ ] • 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 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
- Adts, data structures, and problem solving with c++
- Parameterized adts is also known as
- Parameterized abstract data types
- Adts ukiah
- This passage is adapted from jane austen
- How are red blood cells adapted
- Adapted with permission from
- In what ways have the highland maya adapted to modern life?
- Xerophytic plants diagram
- Chaparral biome location
- Mensaje subliminal camel
- Sausage shaped organelles
- The two brothers adapted
- Adapted from the internet
- How is amoeba adapted for gas exchange bbc bitesize
- How have plants adapted to the rainforest
- Spermopsida
- The outsiders adapted for struggling readers
- Tied synoynm