outline standard template library
play

Outline Standard Template Library STL Components Sequence - PDF document

Outline Standard Template Library STL Components Sequence Containers CS2704: Object-Oriented Software Design Iterators and Construction Sorted Associative Containers Constantinos Phanouriou Department of Computer Science


  1. Outline Standard Template Library • STL Components • Sequence Containers CS2704: Object-Oriented Software Design • Iterators and Construction • Sorted Associative Containers Constantinos Phanouriou Department of Computer Science Virginia Tech CS2704 (Spring 2000) 1 CS2704 (Spring 2000) 2 What is STL? STL Components • STL (or Standard Template Library) is a general- • Containers - classes for objects that contain purpose library of: • Generic algorithms - functions that work – generic algorithms and on different types of containers – data structures • Iterators - “pointers” into containers • Makes programmer more productive: • Function objects – Contains a lot of different components that can be • Adaptors - classes that “adapt” other plugged together and used in an application classes – Provides a framework into which different programming problems can be decomposed • Allocators - objects for allocating space CS2704 (Spring 2000) 3 CS2704 (Spring 2000) 4 Essential Idea Sequence Containers Container Generic Iterators Classes • Arrays - random access, fixed length, Algorithms constant time access Vector sort • vector<T> - random access, varying length, <T> constant time insert/delete at end • deque<T> - random access, varying length, List constant time insert/delete at either end find <T> • list<T> - linear time access, varying length, constant time insert/delete anywhere in list CS2704 (Spring 2000) 5 CS2704 (Spring 2000) 6 1

  2. Vector Example Vector Example (2) int main() { # include < iostream> vector< char> v1 = vec(“01234”), v2; # include < vector> vector< char> ::iterator i = v1.begin(); # include < assert> while (i != v1.end()) v2.push_back(* i+ + ); assert(v1 = = v2); vector< char> vec(char * s) { v1 = vec(“01234”); v2 = vec(“”); vector< char> x; i = v1.begin(); while(* s != ‘\0’) x.push_back(* s+ + ); while (i != v1.end()) v2.insert(v2.begin(),* i+ + ); return x; assert (v2 = = vec(“43210”)); } } CS2704 (Spring 2000) 7 CS2704 (Spring 2000) 8 Use of Iterator Vector and Insert • Type defined by container class • Like array that can increase size vector< T> ::iterator i; • Insert at end ( push_back ) most efficient • Getting specific iterator values • Insert elsewhere requires shifting data – Get first or last: v.begin() , v.end() • Vector doubles in size if insert after “full” – Move to next: i+ + , + + i • Find current size of v with v.capacity() • Dereference to get value “pointed” to: * i • Set size with v.reserve(n) --- wont shrink • Equality and inequality – Note: i = = j and * i = = * j are different CS2704 (Spring 2000) 9 CS2704 (Spring 2000) 10 Vector and Delete Vector Constructors • Remove last element: v.pop_back() • Remove element pointed to by iterator i vector< T> vector; //empty vector with v.erase(i) vector< T> vector(n,value); //vector with n copies of value – Requires shifting data vector< T> vector(n); //vector with n copies of default for T – Invalidates iterators to positions past iterator • v.erase(j+ + ) //doesn’t work • Remove range of values with v.erase(fst,lst) CS2704 (Spring 2000) 11 CS2704 (Spring 2000) 12 2

  3. (Some) Vector Methods Const Iterators • Constant iterator used when object is const • Typical for parameters size_type size() const; // number of elements in vector • Type is defined by container class bool empty() const; // true if no elements vector< T> :: const_iterator reference front(); //returns reference to first element reference back(); //returns reference to last element reference operator[](size_type n) //nth entry CS2704 (Spring 2000) 13 CS2704 (Spring 2000) 14 Container Comparison Container Assignment • Two containers of same type equal if • All STL containers have assignment operator= defined – Have same size – Elements in corresponding positions are equal • Also have v.assign(fst,lst) to assign a range to v • Type in container must have equality operator • For other comparisons need operator< CS2704 (Spring 2000) 15 CS2704 (Spring 2000) 16 Deque Class List Class • Deques are similar to Vectors with a few • Essentially a doubly linked list differences: • Not random access, but constant time insert and – Performance: efficient insert/delete from either end delete – Add a push_front method – Some key generic algorithms cannot be used (e.g., • Most methods and constructors the same as for sorting), theses operations are provided as member functions vector • Some differences in methods from vector and deque (ex., no operator[] ) • Insertions and deletions do not invalidate iterators CS2704 (Spring 2000) 17 CS2704 (Spring 2000) 18 3

  4. Associative Arrays Sorted Associative Containers • A standard array is indexed by numeric type • Values in container sorted by a Key type – A[0],…,A[Size] • set<Key> - collection of unique Key values – Dense indexing • multiset<Key> - possibly duplicate Keys • An associative array can be indexed by any • map<Key, T> - collection of T values type indexed by unique Key values – A[“alfred”], A[“judy”] • multimap<Key,T> - possibly duplicate – Sparse indexing Keys CS2704 (Spring 2000) 19 CS2704 (Spring 2000) 20 Orders for Sorting Orders for Sorting (2) • STL makes assumptions about orders in sort • Actually, use a weaker notion of order functions and sorted associative containers • Define relation E from a relation R by • Ideally, want a strict total ordering : x E y iff both x R y and y R x are false – For every x , y , z , if x < y and y < z then x < z • A relation R is a strict weak ordering if it is – For every x and y , then only one of x < y , y < x , transitive, asymmetric and E is an and x = y is true. equivalence relation • Note: cannot be that x < x CS2704 (Spring 2000) 21 CS2704 (Spring 2000) 22 Example Order Example Order (2) class Name { • Using LastNameLess, public: string last_name; – Zephram Alonzo < Alfred Zimbalist string first_name; – Alonzo Church is equivalent to Bob Church } ; • Notice that equivalence defined this way is class LastNameLess { public: not the same as operator= = bool operator()(const Name& n1, const Name& n2) const { return n1.last_name < n2.last_name; } } ; CS2704 (Spring 2000) 23 CS2704 (Spring 2000) 24 4

  5. Example Order (3) Special Function Objects • If have operator< for a class T then can use Name x[100]; special template class to build order ... Code to insert values in x[0] ... x[99] function objects • less<T> assumes T has an operator< sort(&x[0], &x[100], LastNameLess() ); • In header file function.h CS2704 (Spring 2000) 25 CS2704 (Spring 2000) 26 Default Template Arguments Sets and Multisets • Can specify a default argument to template • Both sets and multisets store key values • Default used if a specific class not given • Both require order as defined above • Ex. For set class: • Set only allows distinct objects (by order) template< class Key, class Compare = less< Key>, • Multiset allows distinct objects class Allocator = allocator> • Can say set< Name, LastNameLess> or set< Name> if operator< defined on Name CS2704 (Spring 2000) 27 CS2704 (Spring 2000) 28 Set Constructors Set Example // Create Empty set set(const Compare& comp = Compare()); # include < list> # include < set> // Create a set with elements in range # include < assert> template< class InputIterator> set(InputIterator first, InputIterator last, //transfer non-null characters to list list< char> lst(char* s) { const Compare& comp = Compare()); list< char> x; while (* s != ‘\0’) x.push_back(* s++ ); // copy constructor return x; set(const set< Key, Compare, Allocator> & } otherset); CS2704 (Spring 2000) 29 CS2704 (Spring 2000) 30 5

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