1 / 18

Standard Containers: Vectors

Learn about the vector container in the Standard Template Library (STL) in C++, including operations, increasing capacity, and using iterators.

elises
Download Presentation

Standard Containers: Vectors

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

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

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

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

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

  7. 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()

  8. vector Operations • Assignmentv1 = v2 • Swappingv1.swap(v2) • Relational operators ==implies element by element equality less than<behaves like string comparison

  9. 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

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

  11. Increasing Capacity of a Vector • Item being added now stored • Destroy old array • Make new arraythe vector's storagearea

  12. 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

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

  14. 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 vecIter = v.begin()

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

  16. for (vector<double>::iterator it = v.begin(); it != v.end(); it++)out << *it << " "; 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;}

  17. 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), v.erase(iter1,iter2) • 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 ) v.erase(iter1, iter2)

  18. Contrast Vectors and Arrays

More Related