iterators patterns and stl
play

Iterators: Patterns and STL Access a container without knowing how - PowerPoint PPT Presentation

Iterators: Patterns and STL Access a container without knowing how its implemented libtapestry: first, isDone, next, current iterators are part of an inheritance hierarchy: Iterator STL begin, end, *, ++ for pointer


  1. Iterators: Patterns and STL ● Access a container without knowing how it’s implemented ➤ libtapestry: • first, isDone, next, current • iterators are part of an inheritance hierarchy: Iterator ➤ STL • begin, end, *, ++ for pointer like syntax • no inheritance, all typedefs in each STL class ● What are iterator properties, who makes the iterator ➤ const, non-const, random-access, … ➤ makeIterator uses new internally, who deletes? • Pointer Proxy: “smart pointers”, allocated on stack but act like heap-allocated pointers 7. 1 Duke CPS 108

  2. Access to map classes ● Both STL and libtapestry use a templated Pair class ➤ first, second in pair correspond to key, value in map ➤ returned by *iterator and iterator->current() ● libtapestry ➤ includes, insert, getValue: see map.h ➤ leads to redundant lookups in map implementation ● STL ➤ operator[], insert ➤ map[key] = value; inserts pair if not there ➤ potential problem with if(map[key] == …) ● hash_map is NOT standard STL, map uses red-black tree 7. 2 Duke CPS 108

  3. templates and generic classes/functions ● STL is the standard template library ➤ part of C++ as a library of generic functions, classes, and algorithms ➤ uses no inheritance, but templates can require existence of operators/functions • in hash_map class, operator == is needed • in map class, operator < is needed ● A templated class is not code, but a code generator ➤ separation of interface and implementation is tricky ➤ implementation is a generator, not code ➤ must instantiate generator at compile time 7. 3 Duke CPS 108

  4. Using templated functions (classes) ● Generic sort template <class Type> void sort(Vector<Type> & a, int numElts) // pre: numElts = number of elements in a // post: a[0] <= a[1] <= … <= a[numElts-1] ● What must be true of Type? ➤ Comparable ➤ ??? ● Instantiate templated function/class ➤ bind template parameters, unify types Vector<string> vs; … sort(vs,vs.size()); Vector<Vector<int> > vvi; … sort(vvi,vvi.size()); 7. 4 Duke CPS 108

  5. templated classes ● If interface (.h) and implementation (.cc) are separate, client code must have access to implementation ➤ can define all code inline, in class (vector.h) ➤ can explicitly instantiate all uses in a separate file ➤ can #include “tempclass.cc” in .h file, problems? • -frepo flag fixes this in g++ • VC++ (and other PC compilers) use this approach ● STL classes use inline approach ➤ see the <vector> or <map> header files ● Dangers of code-bloat ➤ no literal code sharing between Vector<string> and Vector<int> 7. 5 Duke CPS 108

  6. Where are bottlenecks? ● You can time sections of code ➤ class Ctimer accessible via “ctimer.h” ➤ you can use /bin/time or shell time • real, system, user ● You can profile code ➤ use the -pg option with compiler and run gprof (see help page) ➤ instruments code, finds how many times each function is called, what percentage of overall time each uses ● You can optimize code ➤ -O2, -O4 with g++, this can affect debugging ➤ make it run, make it right, make it fast 7. 6 Duke CPS 108

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend