 2003 Prentice Hall, Inc. All rights reserved. 1 Chapter 21 - Standard Template Library (STL) Outline 21.1 Introduction to the Standard Template Library.

Slides:



Advertisements
Similar presentations
SEG4110 – Advanced Software Design and Reengineering TOPIC J C++ Standard Template Library.
Advertisements

Data Structures Using C++ 2E
 2000 Deitel & Associates, Inc. All rights reserved. Chapter 20 - Standard Template Library (STL) Outline 20.1Introduction to the Standard Template Library.
. STL: C++ Standard Library. Main Ideas u General purpose: generic data structures & algorithms, templates u Flexibility: Allows for many combinations.
More on the STL vector list stack queue priority_queue.
 2006 Pearson Education, Inc. All rights reserved Standard Template Library (STL)
 2003 Prentice Hall, Inc. All rights reserved. 1 Introduction to the Standard Template Library (STL) STL –Useful template-based components Containers:
C++ Programming: Program Design Including Data Structures, Second Edition Chapter 22: Standard Template Library (STL)
 2003 Prentice Hall, Inc. All rights reserved. 1 Chapter 21 - Standard Template Library (STL) Outline 21.1 Introduction to the Standard Template Library.
Standard Template Library (STL) Overview – Part 1 Yngvi Bjornsson.
CMSC 202 Lesson 24 Iterators and STL Containers. Warmup Write the class definition for the templated Bag class – A bag has: Random insertion Random removal.
Data Structures Using C++1 Chapter 13 Standard Template Library (STL) II.
Rossella Lau Lecture 12, DCO10105, Semester B, DCO10105 Object-Oriented Programming and Design  Lecture 12: An Introduction to the STL  Basic.
Templates and the STL.
Writing Your Own STL Container Ray Lischner
Sorting and Vectors Mechanism for representing lists JPC and JWD © 2002 McGraw-Hill, Inc. Modified by S. Sudarshan.
ECE 250 Algorithms and Data Structures Douglas Wilhelm Harder, M.Math. LEL Department of Electrical and Computer Engineering University of Waterloo Waterloo,
Standard Template Library There are 3 key components in the STL –Containers –Iterators –Algorithms Promote reuse More debugged May be more efficient.
 2003 Prentice Hall, Inc. All rights reserved stack Adapter stack –Header –Insertions and deletions at one end –Last-in, first-out (LIFO) data.
Data Structures Using C++ 2E
Containers Overview and Class Vector
1 CSC 262 Programming in C++ II Sykes Day 18.  We’ve repeatedly emphasized the importance of software reuse.  Recognizing that many data structures.
CNS  Sequences  vector,deque,list,(string),forward_list  Container Adapters  queue, stack, priority_queue  Associative Containers  set, unordered_set.
C++ How to Program, 8/e © by Pearson Education, Inc. All Rights Reserved.
Introduction to STL and the vector container class CS342 Data Structures Based on Ford & Topp.
Main Index Contents 11 Main Index Contents Week 3 – The Vector Container.
 2006 Pearson Education, Inc. All rights reserved Standard Template Library (STL)
Generic Programming Using the C++ Standard Template Library.
Nirmalya Roy School of Electrical Engineering and Computer Science Washington State University Cpt S 122 – Data Structures Standard Template Library (STL)
Data Structures Using C++ 2E Chapter 13 Standard Template Library (STL) II.
STL List // constructing lists #include int main () { // constructors used in the same order as described above: std::list first; // empty list of ints.
C++ Programming: Program Design Including Data Structures, Fourth Edition Chapter 22: Standard Template Library (STL)
Templates code reuse - inheritance - template classes template classes - a class that is not data-type specific - eg. a class of Array of any type - intArray,
Generic Programming and the STL Andreas Fabri GeometryFactory.
Chapter 9: Part 2: Vectors + Maps and STL Overview JPC and JWD © 2002 McGraw-Hill, Inc. Modified by S. Sudarshan.
Standard Template Library The Standard Template Library was recently added to standard C++. –The STL contains generic template classes. –The STL permits.
Chapter 22 STL Containers §22.1 STL Basics §22.2 STL Iterators §22.3 Sequence Containers §22.4 Associative Containers §22.5 Container Adapters.
 2003 Prentice Hall, Inc. All rights reserved.m ECE 2552 Dr. Këpuska based on Dr. S. Kozaitis Summer Chapter 15 - Class string and String Stream.
 2003 Prentice Hall, Inc. All rights reserved Introduction to the Standard Template Library (STL) STL –Powerful, template-based components Containers:
 2003 Prentice Hall, Inc. All rights reserved. 1 IS 0020 Program Design and Software Tools File Processing, Standard Template Library Lecture 12 July.
Lecture 7 : Intro. to STL (Standard Template Library)
Computer Science and Software Engineering University of Wisconsin - Platteville 11.Standard Template Library Yan Shi CS/SE 2630 Lecture Notes.
A gentle introduction to the standard template library (STL) Some references:
1 STL Containers Copyright Kip Irvine, All rights reserved. Only students enrolled in a class at Florida International University may copy or print.
 2008 Pearson Education, Inc. All rights reserved. 1 Arrays and Vectors.
The Standard Template Library Container Classes Version 1.0.
 2003 Prentice Hall, Inc. All rights reserved. 1 IS 0020 Program Design and Software Tools Template, Standard Template Library Lecture 9 March 22, 2005.
 2003 Prentice Hall, Inc. All rights reserved. 1 IS 0020 Program Design and Software Tools Standard Template Library Lecture 12 April 6, 2004.
Standard Template Library (STL) Outline 21.1 Introduction to the Standard Template Library (STL) Introduction to Containers Introduction.
More STL Container Classes ECE Last Time Templates –Functions –Classes template void swap_val (VariableType &a, VariableType &b) { VariableType.
Algorithms CNS 3370 Copyright 2003, Fresh Sources, Inc.
Chapter 17 – Templates. Function Templates u Express general form for a function u Example: template for adding two numbers Lesson 17.1 template Type.
 2003 Prentice Hall, Inc. All rights reserved vector Sequence Container Declarations –std::vector v; type : int, float, etc. Iterators –std::vector.
CSCI  Sequence Containers – store sequences of values ◦ vector ◦ deque ◦ list  Associative Containers – use “keys” to access data rather than.
Object-Oriented Programming (OOP) Lecture No. 42.
Unit VI.  C++ templates are a powerful mechanism for code reuse, as they enable the programmer to write code (classes as well as functions) that behaves.
1 The Standard Template Library The STL is a collection of Container classes These are class templates for containers. A container is an object that stores.
Object-Oriented Programming (OOP) Lecture No. 41
Standard Template Library (STL)
Chapter 22: Standard Template Library (STL)
Chapter 20 - Standard Template Library (STL)
Chapter 21 - Standard Template Library (STL)
Chapter 21 - Standard Template Library (STL)
Chapter 21 - Standard Template Library (STL)
Iterators and STL Containers
Standard Template Library
Standard Template Library
Chapter 21 - Standard Template Library (STL)
Chapter 21 - Standard Template Library (STL)
Presentation transcript:

 2003 Prentice Hall, Inc. All rights reserved. 1 Chapter 21 - Standard Template Library (STL) Outline 21.1 Introduction to the Standard Template Library (STL) Introduction to Containers Introduction to Iterators Introduction to Algorithms 21.2 Sequence Containers vector Sequence Container list Sequence Container deque Sequence Container 21.3 Associative Containers multiset Associative Container set Associative Container multimap Associative Container map Associative Container 21.4 Container Adapters stack Adapter queue Adapter priority_queue Adapter

 2003 Prentice Hall, Inc. All rights reserved. 2 Chapter 21 - Standard Template Library (STL) 21.5 Algorithms fill, fill_n, generate and generate_n equal, mismatch and lexicographical_compare remove, remove_if, remove_copy and remove_copy_if replace, replace_if, replace_copy and replace_copy_if Mathematical Algorithms Basic Searching and Sorting Algorithms swap, iter_swap and swap_ranges copy_backward, merge, unique and reverse inplace_merge, unique_copy and reverse_copy Set Operations lower_bound, upper_bound and equal_range Heapsort min and max Algorithms Not Covered in This Chapter 21.6 Class bitset 21.7 Function Objects

 2003 Prentice Hall, Inc. All rights reserved Introduction to the Standard Template Library (STL) STL –Powerful, template-based components Containers: template data structures Iterators: like pointers, access elements of containers Algorithms: data manipulation, searching, sorting, etc. –Object- oriented programming: reuse, reuse, reuse –Only an introduction to STL, a huge class library

 2003 Prentice Hall, Inc. All rights reserved Introduction to Containers Three types of containers –Sequence containers Linear data structures (vectors, linked lists) First-class container –Associative containers Non-linear, can find elements quickly Key/value pairs First-class container –Container adapters Near containers –Similar to containers, with reduced functionality Containers have some common functions

 2003 Prentice Hall, Inc. All rights reserved. 5 STL Container Classes (Fig. 21.1) Sequence containers –vector –deque –list Associative containers –set –multiset –map –multimap Container adapters –stack –queue –priority_queue

 2003 Prentice Hall, Inc. All rights reserved. 6 Common STL Member Functions (Fig. 21.2) Member functions for all containers –Default constructor, copy constructor, destructor –empty –max_size, size –= >= == != –swap Functions for first-class containers –begin, end –rbegin, rend –erase, clear

 2003 Prentice Hall, Inc. All rights reserved. 7 Common STL typedefs (Fig. 21.4) typedef s for first-class containers –value_type –reference –const_reference –pointer –iterator –const_iterator –reverse_iterator –const_reverse_iterator –difference_type –size_type

 2003 Prentice Hall, Inc. All rights reserved Introduction to Iterators Iterators similar to pointers –Point to first element in a container –Iterator operators same for all containers * dereferences ++ points to next element begin() returns iterator to first element end() returns iterator past last element –Use iterators with sequences (ranges) Containers Input sequences: istream_iterator Output sequences: ostream_iterator

 2003 Prentice Hall, Inc. All rights reserved Introduction to Iterators Usage –std::istream_iterator inputInt( cin ) Can read input from cin *inputInt –Dereference to read first int from cin ++inputInt –Go to next int in stream –std::ostream_iterator outputInt(cout) Can output int s to cout *outputInt = 7 –Outputs 7 to cout ++outputInt –Advances iterator so we can output next int

 2003 Prentice Hall, Inc. All rights reserved. Outline 10 fig21_05.cpp (1 of 2) 1 // Fig. 21.5: fig21_05.cpp 2 // Demonstrating input and output with iterators. 3 #include 4 5 using std::cout; 6 using std::cin; 7 using std::endl; 8 9 #include // ostream_iterator and istream_iterator int main() 12 { 13 cout << "Enter two integers: "; // create istream_iterator for reading int values from cin 16 std::istream_iterator inputInt( cin ); int number1 = *inputInt; // read int from standard input 19 ++inputInt; // move iterator to next input value 20 int number2 = *inputInt; // read int from standard input 21 Note creation of istream_iterator. For compilation reasons, we use std:: rather than a using statement. Access and assign the iterator like a pointer.

 2003 Prentice Hall, Inc. All rights reserved. Outline 11 fig21_05.cpp (2 of 2) fig21_05.cpp output (1 of 1) 22 // create ostream_iterator for writing int values to cout 23 std::ostream_iterator outputInt( cout ); cout << "The sum is: "; 26 *outputInt = number1 + number2; // output result to cout 27 cout << endl; return 0; } // end main Enter two integers: The sum is: 37 Create an ostream_iterator is similar. Assigning to this iterator outputs to cout.

 2003 Prentice Hall, Inc. All rights reserved. 12 Iterator Categories (Fig. 21.6) Input –Read elements from container, can only move forward Output –Write elements to container, only forward Forward –Combines input and output, retains position –Multi-pass (can pass through sequence twice) Bidirectional –Like forward, but can move backwards as well Random access –Like bidirectional, but can also jump to any element

 2003 Prentice Hall, Inc. All rights reserved. 13 Iterator Types Supported (Fig. 21.8) Sequence containers –vector : random access –deque : random access –list : bidirectional Associative containers (all bidirectional) –set –multiset –Map –multimap Container adapters (no iterators supported) –stack –queue –priority_queue

 2003 Prentice Hall, Inc. All rights reserved. 14 Iterator Operations (Fig ) All –++p, p++ Input iterators –*p –p = p1 –p == p1, p != p1 Output iterators –*p –p = p1 Forward iterators –Have functionality of input and output iterators

 2003 Prentice Hall, Inc. All rights reserved. 15 Iterator Operations (Fig ) Bidirectional –--p, p-- Random access –p + i, p += i –p - i, p -= i –p[i] –p < p1, p <= p1 –p > p1, p >= p1

 2003 Prentice Hall, Inc. All rights reserved Introduction to Algorithms STL has algorithms used generically across containers –Operate on elements indirectly via iterators –Often operate on sequences of elements Defined by pairs of iterators First and last element –Algorithms often return iterators find() Returns iterator to element, or end() if not found –Premade algorithms save programmers time and effort

 2003 Prentice Hall, Inc. All rights reserved Sequence Containers Three sequence containers –vector - based on arrays –deque - based on arrays –list - robust linked list

 2003 Prentice Hall, Inc. All rights reserved vector Sequence Container vector – –Data structure with contiguous memory locations Access elements with [] –Use when data must be sorted and easily accessible When memory exhausted –Allocates larger, contiguous area of memory –Copies itself there –Deallocates old memory Has random access iterators

 2003 Prentice Hall, Inc. All rights reserved vector Sequence Container Declarations –std::vector v; type : int, float, etc. Iterators –std::vector ::const_iterator iterVar; const_iterator cannot modify elements –std::vector ::reverse_iterator iterVar; Visits elements in reverse order (end to beginning) Use rbegin to get starting point Use rend to get ending point

 2003 Prentice Hall, Inc. All rights reserved vector Sequence Container vector functions –v.push_back(value) Add element to end (found in all sequence containers). –v.size() Current size of vector –v.capacity() How much vector can hold before reallocating memory Reallocation doubles size –vector v(a, a + SIZE) Creates vector v with elements from array a up to (not including) a + SIZE

 2003 Prentice Hall, Inc. All rights reserved vector Sequence Container vector functions –v.insert( iterator, value ) Inserts value before location of iterator –v.insert( iterator, array, array + SIZE ) Inserts array elements (up to, but not including array + SIZE) into vector –v.erase( iterator ) Remove element from container –v.erase( iter1, iter2 ) Remove elements starting from iter1 and up to (not including) iter2 –v.clear() Erases entire container

 2003 Prentice Hall, Inc. All rights reserved vector Sequence Container vector functions operations –v.front(), v.back() Return first and last element –v[elementNumber] = value; Assign value to an element –v.at(elementNumber) = value; As above, with range checking out_of_bounds exception

 2003 Prentice Hall, Inc. All rights reserved vector Sequence Container ostream_iterator –std::ostream_iterator Name( outputStream, separator ); type : outputs values of a certain type outputStream : iterator output location separator : character separating outputs Example –std::ostream_iterator output( cout, " " ); –std::copy( iterator1, iterator2, output ); Copies elements from iterator1 up to (not including) iterator2 to output, an ostream_iterator

 2003 Prentice Hall, Inc. All rights reserved. Outline 24 fig21_14.cpp (1 of 3) 1 // Fig : fig21_14.cpp 2 // Demonstrating standard library vector class template. 3 #include 4 5 using std::cout; 6 using std::cin; 7 using std::endl; 8 9 #include // vector class-template definition // prototype for function template printVector 12 template 13 void printVector( const std::vector &integers2 ); int main() 16 { 17 const int SIZE = 6; 18 int array[ SIZE ] = { 1, 2, 3, 4, 5, 6 }; std::vector integers; cout << "The initial size of integers is: " 23 << integers.size() 24 << "\nThe initial capacity of integers is: " 25 << integers.capacity(); 26 Create a vector of int s. Call member functions.

 2003 Prentice Hall, Inc. All rights reserved. Outline 25 fig21_14.cpp (2 of 3) 27 // function push_back is in every sequence collection 28 integers.push_back( 2 ); 29 integers.push_back( 3 ); 30 integers.push_back( 4 ); cout << "\nThe size of integers is: " << integers.size() 33 << "\nThe capacity of integers is: " 34 << integers.capacity(); cout << "\n\nOutput array using pointer notation: "; for ( int *ptr = array; ptr != array + SIZE; ++ptr ) 39 cout << *ptr << ' '; cout << "\nOutput vector using iterator notation: "; 42 printVector( integers ); cout << "\nReversed contents of vector integers: "; 45 Add elements to end of vector using push_back.

 2003 Prentice Hall, Inc. All rights reserved. Outline 26 fig21_14.cpp (3 of 3) 46 std::vector ::reverse_iterator reverseIterator; for ( reverseIterator = integers.rbegin(); 49 reverseIterator!= integers.rend(); 50 ++reverseIterator ) 51 cout << *reverseIterator << ' '; cout << endl; return 0; } // end main // function template for outputting vector elements 60 template 61 void printVector( const std::vector &integers2 ) 62 { 63 std::vector ::const_iterator constIterator; for ( constIterator = integers2.begin(); 66 constIterator != integers2.end(); 67 constIterator++ ) 68 cout << *constIterator << ' '; } // end function printVector Walk through vector backwards using a reverse_iterator. Template function to walk through vector forwards.

 2003 Prentice Hall, Inc. All rights reserved. Outline 27 fig21_14.cpp output (1 of 1) The initial size of v is: 0 The initial capacity of v is: 0 The size of v is: 3 The capacity of v is: 4 Contents of array a using pointer notation: Contents of vector v using iterator notation: Reversed contents of vector v: 4 3 2

 2003 Prentice Hall, Inc. All rights reserved. Outline 28 fig21_15.cpp (1 of 3) 1 // Fig : fig21_15.cpp 2 // Testing Standard Library vector class template 3 // element-manipulation functions. 4 #include 5 6 using std::cout; 7 using std::endl; 8 9 #include // vector class-template definition 10 #include // copy algorithm int main() 13 { 14 const int SIZE = 6; 15 int array[ SIZE ] = { 1, 2, 3, 4, 5, 6 }; std::vector integers( array, array + SIZE ); 18 std::ostream_iterator output( cout, " " ); cout << "Vector integers contains: "; 21 std::copy( integers.begin(), integers.end(), output ); cout << "\nFirst element of integers: " << integers.front() 24 << "\nLast element of integers: " << integers.back(); 25 Create vector (initialized using an array) and ostream_iterator. Copy range of iterators to output ( ostream_iterator ).

 2003 Prentice Hall, Inc. All rights reserved. Outline 29 fig21_15.cpp (2 of 3) 26 integers[ 0 ] = 7; // set first element to 7 27 integers.at( 2 ) = 10; // set element at position 2 to // insert 22 as 2nd element 30 integers.insert( integers.begin() + 1, 22 ); cout << "\n\nContents of vector integers after changes: "; 33 std::copy( integers.begin(), integers.end(), output ); // access out-of-range element 36 try { 37 integers.at( 100 ) = 777; } // end try // catch out_of_range exception 42 catch ( std::out_of_range outOfRange ) { 43 cout << "\n\nException: " << outOfRange.what(); } // end catch // erase first element 48 integers.erase( integers.begin() ); 49 cout << "\n\nVector integers after erasing first element: "; 50 std::copy( integers.begin(), integers.end(), output ); 51 More vector member functions. at has range checking, and can throw an exception.

 2003 Prentice Hall, Inc. All rights reserved. Outline 30 fig21_15.cpp (3 of 3) 52 // erase remaining elements 53 integers.erase( integers.begin(), integers.end() ); 54 cout << "\nAfter erasing all elements, vector integers " 55 << ( integers.empty() ? "is" : "is not" ) << " empty"; // insert elements from array 58 integers.insert( integers.begin(), array, array + SIZE ); 59 cout << "\n\nContents of vector integers before clear: "; 60 std::copy( integers.begin(), integers.end(), output ); // empty integers; clear calls erase to empty a collection 63 integers.clear(); 64 cout << "\nAfter clear, vector integers " 65 << ( integers.empty() ? "is" : "is not" ) << " empty"; cout << endl; return 0; } // end main

 2003 Prentice Hall, Inc. All rights reserved. Outline 31 fig21_15.cpp output (1 of 1) Vector integers contains: First element of integers: 1 Last element of integers: 6 Contents of vector integers after changes: Exception: invalid vector subscript Vector integers after erasing first element: After erasing all elements, vector integers is empty Contents of vector integers before clear: After clear, vector integers is empty

 2003 Prentice Hall, Inc. All rights reserved list Sequence Container list container –Header –Efficient insertion/deletion anywhere in container –Doubly-linked list (two pointers per node) –Bidirectional iterators –std::list name;

 2003 Prentice Hall, Inc. All rights reserved list Sequence Container list functions for object t –t.sort() Sorts in ascending order –t.splice(iterator, otherObject ); Inserts values from otherObject before iterator, removes otherObject –t.merge( otherObject ) Removes otherObject and inserts it into t, sorted –t.unique() Removes duplicate elements

 2003 Prentice Hall, Inc. All rights reserved list Sequence Container list functions –t.swap(otherObject); Exchange contents –t.assign(iterator1, iterator2) Replaces contents with elements in range of iterators –t.remove(value) Erases all instances of value

 2003 Prentice Hall, Inc. All rights reserved. Outline 35 fig21_17.cpp (1 of 5) 1 // Fig : fig21_17.cpp 2 // Standard library list class template test program. 3 #include 4 5 using std::cout; 6 using std::endl; 7 8 #include // list class-template definition 9 #include // copy algorithm // prototype for function template printList 12 template 13 void printList( const std::list &listRef ); int main() 16 { 17 const int SIZE = 4; 18 int array[ SIZE ] = { 2, 6, 4, 8 }; std::list values; 21 std::list otherValues; // insert items in values 24 values.push_front( 1 ); 25 values.push_front( 2 ); 26 values.push_back( 4 ); 27 values.push_back( 3 ); Create two list objects.

 2003 Prentice Hall, Inc. All rights reserved. Outline 36 fig21_17.cpp (2 of 5) cout << "values contains: "; 30 printList( values ); values.sort(); // sort values cout << "\nvalues after sorting contains: "; 35 printList( values ); // insert elements of array into otherValues 38 otherValues.insert( otherValues.begin(), 39 array, array + SIZE ); cout << "\nAfter insert, otherValues contains: "; 42 printList( otherValues ); // remove otherValues elements and insert at end of values 45 values.splice( values.end(), otherValues ); cout << "\nAfter splice, values contains: "; 48 printList( values ); values.sort(); // sort values cout << "\nAfter sort, values contains: "; 53 printList( values ); 54 Various list member functions.

 2003 Prentice Hall, Inc. All rights reserved. Outline 37 fig21_17.cpp (3 of 5) 55 // insert elements of array into otherValues 56 otherValues.insert( otherValues.begin(), 57 array, array + SIZE ); 58 otherValues.sort(); cout << "\nAfter insert, otherValues contains: "; 61 printList( otherValues ); // remove otherValues elements and insert into values 64 // in sorted order 65 values.merge( otherValues ); cout << "\nAfter merge:\n values contains: "; 68 printList( values ); 69 cout << "\n otherValues contains: "; 70 printList( otherValues ); values.pop_front(); // remove element from front 73 values.pop_back(); // remove element from back cout << "\nAfter pop_front and pop_back:" 76 << "\n values contains: "; 77 printList( values ); values.unique(); // remove duplicate elements cout << "\nAfter unique, values contains: "; 82 printList( values );

 2003 Prentice Hall, Inc. All rights reserved. Outline 38 fig21_17.cpp (4 of 5) // swap elements of values and otherValues 85 values.swap( otherValues ); cout << "\nAfter swap:\n values contains: "; 88 printList( values ); 89 cout << "\n otherValues contains: "; 90 printList( otherValues ); // replace contents of values with elements of otherValues 93 values.assign( otherValues.begin(), otherValues.end() ); cout << "\nAfter assign, values contains: "; 96 printList( values ); // remove otherValues elements and insert into values 99 // in sorted order 100 values.merge( otherValues ); cout << "\nAfter merge, values contains: "; 103 printList( values ); values.remove( 4 ); // remove all 4s cout << "\nAfter remove( 4 ), values contains: "; 108 printList( values );

 2003 Prentice Hall, Inc. All rights reserved. Outline 39 fig21_17.cpp (5 of 5) cout << endl; return 0; } // end main // printList function template definition; uses 117 // ostream_iterator and copy algorithm to output list elements 118 template 119 void printList( const std::list &listRef ) 120 { 121 if ( listRef.empty() ) 122 cout << "List is empty"; else { 125 std::ostream_iterator output( cout, " " ); 126 std::copy( listRef.begin(), listRef.end(), output ); } // end else } // end function printList

 2003 Prentice Hall, Inc. All rights reserved. Outline 40 fig21_17.cpp output (1 of 1) values contains: values after sorting contains: After insert, otherValues contains: After splice, values contains: After sort, values contains: After insert, otherValues contains: After merge: values contains: otherValues contains: List is empty After pop_front and pop_back: values contains: After unique, values contains: After swap: values contains: List is empty otherValues contains: After assign, values contains: After merge, values contains: After remove( 4 ), values contains:

 2003 Prentice Hall, Inc. All rights reserved deque Sequence Container deque ("deek"): double-ended queue –Header –Indexed access using [] –Efficient insertion/deletion in front and back –Non-contiguous memory: has "smarter" iterators Same basic operations as vector –Also has push_front (insert at front of deque ) pop_front (delete from front)

 2003 Prentice Hall, Inc. All rights reserved. Outline 42 fig21_18.cpp (1 of 2) 1 // Fig : fig21_18.cpp 2 // Standard library class deque test program. 3 #include 4 5 using std::cout; 6 using std::endl; 7 8 #include // deque class-template definition 9 #include // copy algorithm int main() 12 { 13 std::deque values; 14 std::ostream_iterator output( cout, " " ); // insert elements in values 17 values.push_front( 2.2 ); 18 values.push_front( 3.5 ); 19 values.push_back( 1.1 ); cout << "values contains: "; // use subscript operator to obtain elements of values 24 for ( int i = 0; i < values.size(); ++i ) 25 cout << values[ i ] << ' '; 26 Create a deque, use member functions.

 2003 Prentice Hall, Inc. All rights reserved. Outline 43 fig21_18.cpp (2 of 2) fig21_18.cpp output (1 of 1) 27 values.pop_front(); // remove first element cout << "\nAfter pop_front, values contains: "; 30 std::copy( values.begin(), values.end(), output ); // use subscript operator to modify element at location 1 33 values[ 1 ] = 5.4; cout << "\nAfter values[ 1 ] = 5.4, values contains: "; 36 std::copy( values.begin(), values.end(), output ); cout << endl; return 0; } // end main values contains: After pop_front, values contains: After values[ 1 ] = 5.4, values contains: