more on the stl vector list stack queue priority_queue
Post on 20-Dec-2015
218 views
TRANSCRIPT
More on the STLvector<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> vs. list<T>
• 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)
Use different storage structures
vector<T> items stored in an array (contiguous storage)
0
list<T> items stored in a linked list (non-contiguous storage)
1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 9 10 11
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 myListlist<int>::iterator iter;iter = myList.begin();while (iter != myList.end()){ //process *iter iter++;}
STL Components
Container Classes AlgorithmsIterators
• 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
#include <iostream>#include <vector>#include <algorithm>#include <cstdlib>using namespace std;void set(int & val); void display(int val); int main( ) { vector<int> A(5); for_each(A.begin( ), A.end( ), set); // would not work if vector<int> A; used 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); cout << endl; return 0;}void set(int & val) { val = rand( );}void display(int val) { cout << " " << val;}
41 18467 6334 26500 1916941 6334 18467 19169 26500Press any key to continue