1 / 12

More on the C++ STL

More on the C++ STL. vector<T> list<T> stack<T> queue<T> priority_queue<T>. STL Container Classes. Sequence containers organize items by position: 1 st , 2 nd , 3 rd , …., last vector, list , deque Adapter containers are restricted versions of other containers

Télécharger la présentation

More on the C++ STL

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. More on the C++ STL vector<T> list<T> stack<T> queue<T> priority_queue<T>

  2. STL Container Classes • Sequence containers organize items by position: 1st, 2nd, 3rd, …., last • vector, list, deque • Adapter containers are restricted versions of other containers • stack, queue, priority_queue • Associative containers organize items based on a key value • set, map, multiset, multimap

  3. vector<T> can expand to hold as many items as needed O(1) insert/delete at end of the list O(n) insert/delete at position i in the list indexing (vec[i]) gives gives O(1) access to any position list<T> can expand to hold as many items as needed O(1) delete of any item O(1) insert before any item no indexing – cannot access item at position i in O(1) vector<T> vs. list<T>

  4. Use different storage structures vector<T> items stored in an array (contiguous storage) 8 0 2 1 4 5 9 10 3 11 6 7 list<T> items stored in a linked list (non-contiguous storage) 0 1 2 3 8 7 4 5 6

  5. Partial list<T> API • list() //construct an empty list • push_back(item) //add item at end of list • pop_back() //remove item at end of list • push_front(item) //add item at front of list • pop_front() //remove item at front of list • size() //return number of items in list • back() //return item at end of list • front() //return item at front of list

  6. STL iterators • an iterator is a generalization of a pointer • used to access an element in the container • each STL container class has a nested iterator class associated with it • vector<T>::iterator • list<T>::iterator • STL container classes have methods which return iterators • begin() //returns an iterator accessing first element • end() //returns an iterator that is past the last //element

  7. iterator operations • iter++ //access next element • iter-- //access prior element • == and != //compare 2 iterators • *iter //dereference the iterator

  8. An Example list<int> myList; // store some items in myList list<int>::iterator iter; iter = myList.begin(); while (iter != myList.end()) { //process *iter iter++; }

  9. Container Classes Algorithms Iterators STL Components • Container classes - templates for classes which hold a collection of elements • Algorithms - templates for functions which operate on a range of elements from a container • range is specified by iterators • Iterators • give access to the element in a container • allow for movement from one element to another

  10. STL Algorithms • designed to operate on a sequence of elements rather than on a specific container • the sequence is designated by two iterators • all container classes have the following two methods • begin( ) - returns an iterator positioned at the container's first element • end( ) - returns an iterator positioned past the container's last element (past-the-end) • C.begin( ), C.end( ) specifies a sequence which contains all elements of the container C

  11. STL Algorithms • some examples of STL algorithms • find(iter1, iter2, value) //returns an iterator • max_element(iter1, iter2) //returns an iterator • sort(iter1, iter2) //sorts using < • for_each(iter1, iter2, F) //applies F to every //item • see STL Programmer's Guide link on home page

  12. Using iterators #include <iostream> #include <vector> #include <algorithm> #include <cstdlib> using namespace std; void set(int & val); void display(int val); void main( ) { vector<int> A(5); for_each(A.begin( ), A.end( ), set); // will not work w/ vector<int> A; for_each(A.begin( ), A.end( ), display); cout << endl; sort(A.begin( ), A.end( )); // operator< must be defined for A's element type for_each(A.begin( ), A.end( ), display); } void set(int & val) { val = rand( ); } void display(int val) { cout << " " << val; }

More Related