1 / 36

The Standard C++ Library

The Standard C++ Library. Main Ideas. Purpose Flexibility Efficiency Simple & Uniform Interface. Concepts. A concept is a list of properties of a type. STL defines a hierarchy of concepts for containers, iterators, and element types. Concepts for element types include:

craig
Download Presentation

The Standard C++ Library

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. The Standard C++ Library .

  2. Main Ideas • Purpose • Flexibility • Efficiency • Simple & Uniform Interface

  3. Concepts • A concept is a list of properties of a type. • STL defines a hierarchy of concepts for containers, iterators, and element types. • Concepts for element types include: • Concept B is a refinement of concept A if it imposes some additional requirements on A. (Similar to inheritance) Equality Comparable - types with operator== ,... LessThan Comparable - types with operator< ,... Assignable - types with operator= and copy Ctor

  4. Iterators Function Objects Adaptors Containers Algorithms Streams Strings Main Components

  5. Containers • Holds copies of elements. • Assumes elements have:Copy Ctor & operator = • The standard defines the interface. • Two main classes • Sequential containers: list, vector,.... • Associative containers:map, set ... Assignable - types with operator= and copy Ctor

  6. Sequential Containers • Maintain a linear sequence of objects

  7. Sequential Containers list - a linked list of objects • Efficient insertion/deletion in front/end/middle vector - an extendable sequence of objects • Efficient insertion/deletion at end • Random access deque – double-ended queue • Efficient insertion/deletion at front/end • Random access

  8. Containers Example - vector<T> • Array of elements of type T • Random Access • Can grow on as needed basis • std::vector<int> v(2); • v[0]= 45; • v[1]= 32; • v.push_back(60);

  9. Associative Containers • Supports efficient retrieval of elements (values) based on keys. (Typical) Implementation: • red-black binary trees • hash-table (SGI extension, not standard)

  10. Sorted Associative Containers Set • A set of unique keys Map • Associate a value to key (associative array) • Unique value of each key Multiset Multimap • Same, but allow multiple values

  11. Function Objects Sorted Associative Containers & Order • SortedAssociative containers use operator< as default order • We can control order by using our own comparison function • To understand this issue, we need to use function object

  12. Function Objects Anything that can be called as if a function. For example: Pointer to function A class that implements operator() Advantage of class: • Enable accumulating information in the function object

  13. Creates temporary objects, and then call operator() Example template<typename T> class less { public: bool operator()(const T& lhs, const T& rhs) { return lhs < rhs; } }; less<int> cmp; // declare an object if( cmp(1,2) ) … if( less<int>()(1,2) ) …

  14. Using Comparators template<typename T, typename Cmp = less<T> > class set { … } … set<int> s1; set<int,less<int> > s2;// same type

  15. Creates a new MyComp object. Use given MyComp object. Using Comparators template<typename T, typename Cmp = less<T> > class set { … } … set<int,MyComp > s3; MyComp cmp; set<int,MyComp > s4(cmp);

  16. Iterators • Iterators are allow to traverse sequences • Main Methods • operator* • operator++, and operator— • Different types of iterators - to support read, write and random access • Containers define their own iterator types • Changing the container can invalidate the iterator

  17. Iterators input ++, input ++, output Trivial Iterator Input Iterator Output Iterator ++, I/O Forward Iterator ++, --, I/O Bi-directional Iterator Pointer arithmetic Random-Access Iterator

  18. Iterator Types • Output: write only and can write only once • Input: read many times each item • Forward supports both read and write • Bi-directional support also decrement • Random supports random access (just like C pointer)

  19. Iterators & Containers Bidirectional iterators: • list, map, set Random access iterators: • vector Input/output/forward iterators: • iostreams

  20. Iterators and Containers class Container { … typedef … iterator; // iterator type of container iterator begin(); // first element of container iterator end(); // element after last of container Container c … Container::iterator i; for( i = c.begin(); i != c.end(); ++i) // do something with *i

  21. Iterators & Map Suppose we work with: map<string,int> dictionary; map<string,int>::iterator i; … i = dictionary.begin(); What is the type of *i ?

  22. Iterators & Map Every STL container type Container defines Container::value_type Type of elements stored in container • This is the type returned by an iterator Container::value_type Container::iterator operator*();

  23. Iterators & Map • Ok, so what type of elements does a map return? • map<KeyType,ValueType> keeps pairs • KeyType key – “key” of entry • ValueType value – “value” of entry

  24. Pairs template< typename T1, typename T2> struct pair { typedef T1 first_type; typedef T2 first_type; T1 first; T2 second; pair( const T1& x, const T2& y ) : first(x), second(y) {} };

  25. Map value_type template< typename Key, typename T, typename Cmp = less<Key> > class map { public: typedef pair<const Key, T> value_type; typedef Key key_type; typedef T mapped_type; typedef Cmp key_compare; };

  26. Using map iterator map<string,int> dict; … map<string,int>::iterator i; for( i = dict.begin(); i != dict.end(); i++ ) { cout << i->first << “ “ << i->second << “\n”; }

  27. Adaptors • Good functionality, wrong interface • For example, adaptors of basic containers • Limited interface: stack<T,Seq> queue<T,Seq>

  28. Algorithms p q sequence [p,q) • Most STL algorithms works on sequences • Sequences are passed as two iterators: • beginning element • element one after last • Algorithms depend on iterator type not on container type

  29. Copy template< typename In, typename Out> Out copy(In first, In last, Out res) { while (first != last) *res++ = *first++; return res; }

  30. Sort template <class RandomAccessIterator, class StrictWeakOrdering> void sort(RandomAccessIterator first, RandomAccessIterator last, StrictWeakOrdering comp);

  31. Cryptic error messages

  32. Cryptic error messages New solution in g++, define before including a standard library header: #define _GLIBCXX_CONCEPT_CHECKS

  33. Links to documentation • SGI: http://www.sgi.com/tech/stl/ • Dinkum: http://www.dinkumware.com/refxcpp.html • http://www.cplusplus.com/ref/

  34. Iterators Function Objects Adaptors Containers Algorithms Streams Strings Main Components

  35. Mutable class String { char* _data; mutable int _len; public: String(const char* data) : _data(data),_len(-1){} void capitalie() { char* p =_data; while (*p) *p= toupper(*p++); } int length() const { if (_len==-1) _len=strlen(_data); return _len; } };

  36. Inserters

More Related