1 STL Overview Prof. Brinton Gordon College. 2 Standard Template Library (STL) Part of ISO-OSI Standard C++ Library 1998 Object oriented programming is.

Slides:



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

Object Oriented Programming Lect. Dr. Daniel POP Universitatea de Vest din Timişoara Facultatea de Matematică şi Informatică.
C++ Sets and Multisets Set containers automatically sort their elements automatically. Multisets allow duplication of elements whereas sets do not. Usually,
. 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)
OOP Etgar 2008 – Recitation 101 Object Oriented Programming Etgar 2008 Recitation 10.
C++ Programming: Program Design Including Data Structures, Second Edition Chapter 22: Standard Template Library (STL)
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.
The Standard Template Library. Books on standard C++ library Nicolai M. Josuttis: C++ Standard Library: A tutorial and Reference, 1st, Pearson 1999, Nicolai.
. STL: C++ Standard Library. Main Ideas u General purpose: generic data structures & algorithms, templates u Flexibility: Allows for many combinations.
Lecture 11 Standard Template Library Stacks, Queue, and Deque Lists Iterators Sets Maps.
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.
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
Containers and Iterators CNS 3370 Copyright 2003, Fresh Sources, Inc.
CNS  Sequences  vector,deque,list,(string),forward_list  Container Adapters  queue, stack, priority_queue  Associative Containers  set, unordered_set.
DATA STRUCTURES AND ALGORITHMS Lecture Notes 12 Prepared by İnanç TAHRALI.
SNU OOPSLA Lab. Chap17. Standard Containers © copyright 2001 SNU OOPSLA Lab.
C++ How to Program, 8/e © by Pearson Education, Inc. All Rights Reserved.
PRESENTED BY: RAJKRISHNADEEPAK.VUYYURU SWAMYCHANDAN.DONDAPATI VINESHKUMARREDDY.LANKA RAJSEKHARTIRUMALA KANDURI ALAN.
1 Today’s Objectives  Announcements The Final Exam will be on Monday, 31-Jul, at 6 p.m. – There is no alternate time and no makeup!  Intro to the Standard.
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.
C++ STL CSCI 3110.
C++ Programming: Program Design Including Data Structures, Fourth Edition Chapter 22: Standard Template Library (STL)
CSE 332: C++ STL containers Review: C++ Standard Template Library (STL) The STL is a collection of related software elements –Containers Data structures:
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.
Friends & Standard Template Library CSCI3110 Advanced Data Structures Lecturer: Dr. Carroll and Nan Chen.
Standard Template Library The Standard Template Library was recently added to standard C++. –The STL contains generic template classes. –The STL permits.
CS 403, Class 23Slide #1 CS Programming Languages Class 23 November 16, 2000.
 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.
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.
CS 403: Programming Languages Lecture 24 Fall 2003 Department of Computer Science University of Alabama Joel Jones.
A gentle introduction to the standard template library (STL) Some references:
Intro to the C++ STL Timmie Smith September 6, 2001.
1 STL Containers Copyright Kip Irvine, All rights reserved. Only students enrolled in a class at Florida International University may copy or print.
The Standard Template Library Container Classes Version 1.0.
Mobility Research Lab mobility.ceng.metu.edu.tr Applied Innovative Interdisciplinary (AI2) Research Lab Short Course on Programming in C/C++
Introduction The STL is a complex piece of software engineering that uses some of C++'s most sophisticated features STL provides an incredible amount.
C++ Review STL CONTAINERS.
1 Chapter 3 Lists, Stacks, and Queues Reading: Sections 3.1, 3.2, 3.3, 3.4 Abstract Data Types (ADT) Iterators Implementation of Vector.
CSCI 383 Object-Oriented Programming & Design Lecture 25 Martin van Bommel.
Algorithms CNS 3370 Copyright 2003, Fresh Sources, Inc.
 2003 Prentice Hall, Inc. All rights reserved. 1 Chapter 21 - Standard Template Library (STL) Outline 21.1 Introduction to the Standard Template Library.
CSCI  Sequence Containers – store sequences of values ◦ vector ◦ deque ◦ list  Associative Containers – use “keys” to access data rather than.
Introduction to Templates and Standard Template Library 1.
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.
Object-Oriented Programming (OOP) Lecture No. 41
Standard Template Library (STL)
Chapter 22: Standard Template Library (STL)
Containers, Iterators, Algorithms, Thrust
Iterators and STL Containers
Lecture 8 : Intro. to STL (Standard Template Library)
Standard Template Library
Standard Template Library
Standard Template Library
Presentation transcript:

1 STL Overview Prof. Brinton Gordon College

2 Standard Template Library (STL) Part of ISO-OSI Standard C++ Library 1998 Object oriented programming is about reuse –STL has many reusable components –Divided into 1.Containers - manage collections of objects 2.Iterators - step through the elements of collections 3.Algorithms - used to process the elements of collections

3 Introduction to Containers Three types of containers 1.sequence containers - ordered collections vector, deque, list 2.associative containers - sorted collections set, multiset, map, multimap 3.container adapters Stacks, queues, priority queues Near-containers - similar to containers, without all the capabilities –C-like arrays –string –bitset - for maintaining sets of 1/0 flag values –valarray - high-speed mathematical vector operations The containers have similar functions

4 Introduction to Containers vector direct access to any element deque rapid insertion at front or back direct access to any element list rapid insertion and deletion anywhere set rapid lookup, no duplicates multiset rapid lookup, duplicates map, multimap store key/value pairs stack last-in-first-out queue first-in-first-out priority_queue highest priority element is first

5 Introduction to Containers Common member functions of all STL containers: constructors, destructors assignment, all comparison operators swap empty max_size size Use if(c.empty()) not if(c.size() == 0)

6 Introduction to Iterators Iterators are similar to pointers –point to element in a container –iterator operators uniform for all containers * dereferences, ++ advances pointer container.begin() returns iterator pointing to first element container.end() returns iterator pointing after last element for(it = c.begin(); it != c.end(); it++) { *it… } it

7 Iterator Categories Bidirectional iterators –Iterate in 2 directions: p++ or p-- –list, set, multiset, map, multimap –Use != instead of in loops Random access iterators –Have all properties of bidirectional iterators –Can also perform random access +, -, –vector, deque, strings

8 Constness of Iterators Examples vector ::iterator it = v.begin(); vector ::const_iterator cit = v.begin(); *cit = 24; // does not compile *it = 24; // ok void fct(const vector & v) { vector ::iterator it; it = v.begin(); // does not compile }

9 Constness of Iterators Examples (Fixed) vector ::iterator it = v.begin(); vector ::iterator cit = v.begin(); *cit = 24; // ok *it = 24; // ok void fct(const vector & v) { vector ::const_iterator it; it = v.begin(); // ok }

10 Iterator Adapters Everything that behaves like an iterator is an iterator –Insert iterator (inserters) –Stream iterator - allow you to use a stream as a source or dest of an algorithm. –Reverse iterators Example: list ::reverse_iterator r1 = L.rbegin(), r2 = L.rend();

11 Iterator Adapters vector coll; back_insert_iterator > iter(coll); *iter = 1; iter++; *iter = 2; iter++; *iter = 3; PRINT_ELEMENTS(coll); back_inserter(coll) = 44; back_inserter(coll) = 55; PRINT_ELEMENTS(coll); coll.reserve(2*coll.size()); copy (coll.begin(), coll.end(), // source back_inserter(coll)); // destination PRINT_ELEMENTS(coll); Results:

12 Introduction to Algorithms STL algorithms used generically across containers: –operate on elements indirectly through iterators –often operate on sequences of elements defined by pairs of iterators –algorithms often return iterators, such as find() –premade algorithms save programmers time and effort

13 Sequence Containers Three sequence containers –vector - based on arrays –deque - based on arrays –list - robust linked list

14 vector Sequence Container vector –#include –data structure with contiguous memory locations –use the subscript operator [] –used when data must be sorted and easily accessible –when memory exhausted allocates a larger, contiguous area of memory copies itself there deallocates the old memory –has a random access iterator

15 vector Sequence Container Declarations –vector v; –vector v(7812); –template vector v(It begin, It end); –type - int, float, Point, whatsoever Iterators: –vector ::const_iterator it; vector ::iterator it = v.begin(); *(it1 + 5) = 34;

16 vector Sequence Container (II) vector functions, for vector object v v.push_back(value) - add element to end v.size() - current size of vector v.capacity() - how much vector can hold before reallocation v.reserve(n) - allow vector to avoid reallocation v.insert( pointer, value ) - inserts value before pointer.

17 vector Sequence Container (III) vector functions and operations v.erase( pointer ) remove element from container v.erase( pointer1, pointer2 ) remove elements starting from pointer1 and up to (not including) pointer2. v.clear() erases entire container. v[elementNumber] = value; assign value to an element v.at[elementNumber] = value; as above, with range checking throws out_of_bounds exception

18 list Sequence Container list container –#include –efficient insertion/deletion anywhere in container –doubly-linked list –bidirectional iterators There exists also a non-standard slist –singly-linked list –forward iterator

19 list Sequence Container (II) list functions for listObject and otherObject listObject.sort() sorts in ascending order listObject.splice(iterator, otherObject); inserts values from otherObject before location of iterator listObject.merge(otherObject) removes otherObject and inserts it into listObject, sorted listObject.unique() removes duplicate elements listObject.swap(otherObject); exchange contents listObject.assign(iterator1, iterator2) replaces contents with elements in range of iterators listObject.remove(value) erases all instances of value

20 deque Sequence Container deque ("deek") - double-ended queue –#include –indexed access using [] –efficient insertion/deletion in front and back –non-contiguous memory: "smarter" pointers same basic operations as vector –adds push_front / pop_front - insertion/deletion at beginning of deque

21 Associative Containers Associative containers –provide direct access to store and retrieve elements via keys (search keys) 4 types: multiset, set, multimap and map –keys in sorted order –multiset and multimap allow duplicate keys –multimap and map allow keys and associate values

22 Excursion: Function Objects template struct less { bool operator()(const T& lhs, const T& rhs) const { return lhs < rhs; } }; less is_smaller; if(is_smaller(45, 34)){..}

23 multiset Associative Container multiset - fast storage, retrieval of keys –allows duplicates Ordering by comparator function object less - sorts keys in ascending order multiset > integers; CGAL comparator function objects typedef CGAL::Cartesian K; multiset points;

24 multiset Associative Container (II) Functions for multiset object msObject –msObject.insert(value) - inserts value –msObject.find(value) - returns iterator to first instance of value, or msObject.end() –msObject.lower_bound(value)- returns iterator to first location of value –msObject.upper_bound(value)- returns iterator to location after last occurrence of value –for a pair object p p = msObject.equal_range(value) sets first and second to lower_bound and upper_bound for a given value

25 set Associative Container set –implementation identical to multiset –unique keys - duplicates ignored and not inserted –supports bidirectional iterators (but not random access) –#include

26 map Associative Container map –fast storage/retrieval of unique key/value pairs –#include –one-to-one mapping (duplicates ignored) –use [] to access values for map M; M[30] = ; sets the value of key 30 to –if subscript not in map, creates new key/value pair –Efficiency remark: Use insert to insert, operator[] to update

27 Non Standard Associative Container hash_(multi)set, hash_(multi)map –Not part of the standard, but provided by some STLs –REALLY fast storage/retrieval of unique key/value pairs –Based on hashing and not on binary trees –No order, but provide iterators

28 Container Adapters container adapters: stack, queue, priority_queue –not first class containers –do not support iterators –do not provide actual data structure –programmer can select implementation of the container adapters –have member functions push() and pop()

29 stack Adapter stack –insertions and deletions at one end –last-in-first-out data structure –implemented with vector, list, and deque (default) –#include Declarations stack > myStack; stack > myOtherStack; stack anotherStack;

30 queue Adapter queue - insertions at back, deletions at front –first-in-first-out data structure –implemented with list or deque –#include Functions –push(element) - (push_back) add to end –pop(element) - (pop_front) remove from front –empty() - test for emptiness –size() - returns number of elements Example: queue values; //create queue values.push(1.2); // values: 1.2 values.push(3.4); // values: values.pop(); // values: 1.2

31 priority_queue Adapter insertions in sorted order, deletions from front –implemented with vector or deque –highest priority element always removed first heapsort puts largest elements at front less by default, programmer can specify another Functions –push - (push_back then reorder elements ) –pop - (pop_back to remove highest priority element ) –size –empty

32 Algorithms Before STL –class libraries were incompatible among vendors –algorithms built into container classes STL separates containers and algorithms –easier to add new algorithms –not member functions of containers, global functions that operate with iterators (reduces the amount of code) Not necessarily intuitive…not all combinations possible. –General fundamental services on containers: Searching Sorting Copying Reordering Modifying Numeric processing

33 Algorithms Example #include using namespace std; int main() { vector coll; vector ::iterator pos; coll.push_back(2); coll.push_back(5); coll.push_back(4); coll.push_back(1); coll.push_back(6); coll.push_back(3); pos = min_element (coll.begin(), coll.end()); cout << "min: " << *pos << endl; pos = max_element (coll.begin(), coll.end()); cout << "max: " << *pos << endl; sort (coll.begin(), coll.end()); pos = find (coll.begin(), coll.end(), 3); reverse (pos, coll.end()); }

34 Algorithms Ranges pos = min_element (coll.begin(), coll.end()); Multiple Ranges if (equal (coll1.begin(), coll1.end(), coll2.begin()) { … } Algorithm Categories: 1.Nonmodifying - count, for_each, min_element… 2.Modifying - copy, transform, merge, replace, fill… 3.Removing - remove, unique… 4.Mutating - reverse, rotate, random_shuffle… 5.Sorting - sort_heap, make_heap, sort, … 6.Algorithms for Sorted Ranges - binary_search, merge, … 7.Numeric - accumulate, inner_product, …

35 Non-Modifying Algorithm: for_each void print (int elem) { cout << elem << ' '; } int main() { vector coll; INSERT_ELEMENTS(coll,1,9); // call print() for each element for_each (coll.begin(), coll.end(), print); cout << endl; }

36 Modifying Algorithm: copy { vector coll1; list coll2; INSERT_ELEMENTS(coll1,1,9); copy (coll1.begin(), coll1.end(), back_inserter(coll2)); copy (coll2.begin(), coll2.end(), ostream_iterator (cout," ")); cout << endl; copy (coll1.rbegin(), coll1.rend(), coll2.begin()); }

37 Modifying Algorithm: unique int source[] = { 1, 4, 4, 6, 1, 2, 2, 3, 1, 6, 6, 6, 5, 7, 5, 4, 4 }; int sourceNum = sizeof(source)/sizeof(source[0]); list coll; copy (source, source+sourceNum, back_inserter(coll)); list ::iterator pos; pos = unique (coll.begin(), coll.end()); copy (coll.begin(), pos, ostream_iterator (cout," " // source)); cout << "\n\n"; copy (source, source+sourceNum, coll.begin()); coll.erase (unique (coll.begin(), coll.end(), greater ()), coll.end());

38 Excursion: Function Object Adapters template struct less : public binary_function { bool operator()(const T& lhs, const T& rhs) const { return lhs < rhs; } }; list L(..); less ::iterator it = find_if(L.begin(), L.end(), not1(bind2nd(less (),34)));

39 accumulate, transform list L(..); int sum = accumulate(L.begin(), L.end(), 0, plus ()); transform(istream_iterator (cin), istream_iterator (), ostream_iterator (cout), mem_fun_ref(Point::x));

40 Basic Searching Algorithms find(iterator1, iterator2, value) –returns iterator pointing to first instance of value find_if(iterator1, iterator2, function) –like find, but returns an iterator when function returns true. binary_search(iterator1, iterator2, value) –searches an ascending sorted list for value using a binary search

41 Sorting Algorithms sort(begin, end) partial_sort(begin, begin+N, end) –finds first N and sorts them nth_element(begin, begin+N, end) –finds first N, not sorted partition(begin, end, function) –splits in two intervals stable_sort, stable_partition Remarks –All take optionaly a comparison function –std::sort is faster than clib sort

42 equal, mismatch, lexicographical_compare Functions to compare sequences of values equal –returns true if sequences are equal (uses == ) –returns false if of unequal length equal(iterator1, iterator2, iterator3); –compares sequence from iterator1 up to iterator2 with the sequence beginning at iterator3 –Containers can be of different types

43 fill, fill_n, generate, generate_n STL functions, change containers. fill - changes a range of elements (from iterator1 to iterator2 ) to value – fill(iterator1, iterator2, value); fill_n - changes specified number of elements, starting at iterator1 –fill_n(iterator1, quantity, value); generate - like fill, but calls a function for value –generate(iterator1, iterator2, function); generate_n - like fill_n, but calls function for value –generate(iterator1, quantity, value)

44 swap, iter_swap and swap_ranges swap(element1, element2) - exchanges two values swap( a[ 0 ], a[ 1 ] ); iter_swap(iterator1, iterator2) - exchanges the values to which the iterators refer swap_ranges(iterator1, iterator2, iterator3) - swap the elements from iterator1 to iterator2 with the elements beginning at iterator3

45 copy_backward, merge, unique, reverse copy_backward(iterator1, iterator2, iterator3) –copy the range of elements from iterator1 to iterator2 into iterator3, but in reverse order. merge(iter1, iter2, iter3, iter4, iter5) –ranges iter1-iter2 and iter3-iter4 must be sorted in ascending order. – merge copies both lists into iter5, in ascending order. unique(iter1, iter2) - removes duplicate elements from a sorted list, returns iterator to new end of sequence. reverse(iter1, iter2)- reverses elements in the range of iter1 to iter2.

46 Remove does (not) Remove Member function: L.remove(Point(0,0)); Algorithm moves at end: list L(istream_iterator (cin), istream_iterator ()); list ::iterator eit; eit = remove(L.begin(), L.end(), Point(0,0)); L.erase(eit, L.end());

47 Other Features of the STL Streams strings, wide strings locales (for internationalization) numerical valarray

48 References N.M. Josuttis, The C++ Standard Library, Addison-Wesley 2001