120 likes | 153 Views
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
E N D
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: 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
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>
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
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
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
iterator operations • iter++ //access next element • iter-- //access prior element • == and != //compare 2 iterators • *iter //dereference the iterator
An Example list<int> myList; // store some items in myList list<int>::iterator iter; iter = myList.begin(); while (iter != myList.end()) { //process *iter iter++; }
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
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
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
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; }