more on the stl vector list stack queue priority_queue

12
More on the STL vector<T> list<T> stack<T> queue<T> priority_queue<T>

Post on 20-Dec-2015

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: More on the STL vector list stack queue priority_queue

More on the STLvector<T>

list<T>stack<T>queue<T>

priority_queue<T>

Page 2: More on the STL vector list stack queue priority_queue

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

Page 3: More on the STL vector list stack queue priority_queue

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)

Page 4: More on the STL vector list stack queue priority_queue

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

Page 5: More on the STL vector list stack queue priority_queue

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

Page 6: More on the STL vector list stack queue priority_queue

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

Page 7: More on the STL vector list stack queue priority_queue

iterator operations

• iter++ //access next element

• iter-- //access prior element

• == and != //compare 2 iterators

• *iter //dereference the iterator

Page 8: More on the STL vector list stack queue priority_queue

An Example

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

Page 9: More on the STL vector list stack queue priority_queue

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

Page 10: More on the STL vector list stack queue priority_queue

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

Page 11: More on the STL vector list stack queue priority_queue

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

Page 12: More on the STL vector list stack queue priority_queue

#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