1 / 30

Today’s Topic

Today’s Topic. Standard template library (STL) Introduction Iterators: I/O Sequence containers: vector Associative containers: map Container adapter: stack Algorithms: searching & sorting. Reminders. Final Exam Thursday, December 19 th , 12:00 – 2:00 pm Covers last 1/3 of class

carol
Download Presentation

Today’s Topic

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. Today’s Topic • Standard template library (STL) • Introduction • Iterators: I/O • Sequence containers: vector • Associative containers: map • Container adapter: stack • Algorithms: searching & sorting

  2. Reminders • Final Exam • Thursday, December 19th, 12:00 – 2:00 pm • Covers last 1/3 of class • Course grade • Will be posted Friday morning • Exams = 300 points • Assignment = 250 points • Total = 550 points

  3. Introduction • Standard Template Library (STL) • Platform independent class libraries • Three components of STL • Containers • Iterators • Algorithms

  4. Containers • Common data structures written as a template class • Three types • Sequence containers • Associative containers • Container adapters • First class containers • Sequence & associative containers • Have certain member functions that container adapters do not have

  5. Sequence Containers • vector • Rapid insertions & deletions at back • Direct access to any element • deque • Rapid insertions & deletions at front or back • Direct access to any element • list • Doubly-linked list • Rapid insertions & deletions anywhere

  6. Associative Containers • set • Rapid lookup, no duplicates allowed • multiset • Rapid lookup, duplicates allowed • map • One to one mapping, rapid key-based lookup, no duplicates allowed • multimap • One to one mapping, rapid key-based lookup, duplicates allowed

  7. Container Adapters • stack • Last-in-first-out • queue • First-in-first-out • priority_queue • Highest priority element is always the first element out

  8. Member Functions • Common member functions for all STL containers • Default constructor, copy constructor, destructor • Each container has several overloaded constructors • empty() • True if no elements in container; false otherwise • size() • Number of elements in the container • operator= • Assigns one container to another

  9. Member Functions II • operator< • True if 1st container is less than the 2nd container • Otherwise returns false • operator<=, >, >=, ==, != • True if 1st is <=, >, >=, ==, or != 2nd • Otherwise returns false • swap • Swaps the elements of two containers

  10. Header Files <vector> <list> <deque> <queue> (has queue & priority_queue) <stack> <map> (has map & multimap) <set> (has set & multiset) <bitset>

  11. Iterators • Iterators similar to pointers • Used to point to elements of 1st class containers • Operators • Dereferencing operator (*) • Dereferences an iterator, so you can use the element to which it points • Increment operator (++) • Moves the iterator to the next element of the container

  12. Iterators II • Operators • begin() • Points to the 1st element of the container • end() • Points one element past the end of the container • Is used only in an equality or inequity comparisons • Iterator objects • iterator points to an element that can be modified • const_iterator points to a constant element

  13. Example I/O & Iterators #include <iostream> #include <iterator> using std::cout; using std::cin; using std::endl; void main(){ int num1, num2; cout<<"Enter two integers: "; std::istream_iterator<int> input(cin); num1=*input; //read first int from standard input ++input;//move iterator to next input value num2=*input; //read next int from standard input cout<<num1<<" + "<<num2<<" = "; std::ostream_iterator<int> output(cout); *output=num1+num2; //output result to cout cout<<endl; }

  14. std:: • Each STL function & definition needs to be preceded with std:: • Should not use using std::, or using namespace std at top of program • Since the code generated by using STL is complicated, it is difficult to construct the proper using statements

  15. Input Iterators std::istream_iterator<int> input(cin); • Creates an istream_iterator that is capable of extracting (inputting) int values from the standard input object cin num1 = *input; • Dereferences iterator input to read the first integer from cin & assign value to num1 ++input; • Positions iterator input to the next value in the input stream

  16. Output Iterators std::ostream_iterator<int> output(cout); • Creates an ostream_iterator that is capable of inserting (outputting) int values in the standard output object cout *output = num1 + num2; • Outputs an integer to cout by assigning to *output the sum of num1 & num2 • (See ioIterator.txt)

  17. Algorithms • STL provides generic algorithms that can be used in most containers • Around 70 standard algorithms • Example algorithm: copy(iter1, iter2, objectB) • Copies each element from object A to object B • Starting with the location specified by the object A’s iterator in the 1st argument • Ending before (not including) the location specified by the Object B’s iterator in the 2nd argument

  18. Vector Sequence Container • Class vector is a data structure with continuous memory locations • Same as an array • Can use the subscript operator [ ], as well as the at( ) member function • Use function push_back() to add elements to the end of the vector object • See examples vector1.txt & vector2.txt

  19. #include <iostream> #include <vector> using std::cout; using std::cin; using std::endl; template <class T> void print(const std::vector<T> &vec){ std::vector<T>::const_iterator vi; for( vi =vec.begin();vi !=vec.end();vi++ ) cout << *vi << ' '; } void main(){ std::vector<int> v; cout<<"v.size() = "<< v.size()<<endl; //=0 v.push_back(10); v.push_back(20); v.push_back(30); cout<<"v.size() = "<< v.size()<<endl; //=3 print(v);//10 20 30 }

  20. Vector Program v.size() • Returns the number of elements currently stored in the container void print(const std::vector<T> &vec){ • A constant reference to vector of type T std::vector<T>::const_iterator vi; • Defines a constant iterator vi that is used to iterate through the vector for(vi=vec.begin(); vi!=vec.end(); vi++) • A loop that starts at the beginning of the vector & ends once it counts past the end of the vector after 2nd element in the vector cout << *vi << ' '; • Outputs the value which the iterator vi points to

  21. #include <iostream> #include <vector> #include <algorithm> using std::cout; using std::endl; void main(){ const int SIZE = 5; char ch[SIZE] = {'a','b','c','d','e'}; std::vector<char> v(ch, ch+SIZE); std::ostream_iterator<char> output(cout," "); cout<<"Vector v = "; std::copy(v.begin(),v.end(),output);//a b c d e v[0] = 'F';//set first element to 'F' v.insert(v.begin()+2,'G');//insert 3nd element v.erase(v.end()-1);//delete last element cout<<"\nVector v = "; std::copy(v.begin(),v.end(),output);//F b G c d v.clear(); cout<<v.empty()<<endl;} //1

  22. Vector Program II std::ostream_iterator<char> output(cout," "); • Defines an ostream_iterator called output that can be used to output characters to the screen std::copy(v.begin(),v.end(),output); • Uses algorithm copy from the STL to output the contents of vector v to the screen v[0] = 'F'; • Just like an array v.insert(v.begin() + 2,'G'); • Insert after 2nd element in the vector v.clear(); • Delete all the elements in the vector

  23. Class Exercise 1 • What’s the output of the program? • See exercise1.txt

  24. Map Associative Container • The map associative container is used for fast storage & retrieval of unique keys & associated values • Duplicate keys are not allowed • Only a single value for each key • Called one-to-one mapping • For example (See map.txt) • A company with unique employee numbers (100, 200, 300) might have a map for their telephone extensions (4567, 4523, 4593)

  25. #include <iostream> using std::cout; using std::endl; #include <map> void main(){ typedef std::map<int,double,std::less<int> > mapType; mapType m; m.insert( mapType::value_type( 50, 5.55 )); m.insert( mapType::value_type( 50, 777.7 )); m.insert( mapType::value_type( 10, 1010.10 )); m[10] = 1.11; m.insert( mapType::value_type( 20, 2.22 )); cout<<"m.size() = "<<m.size()<<endl; mapType::const_iterator it; for(it=m.begin();it!=m.end();++it) cout<<it->first<<'\t'<<it->second<<endl; } m.size() = 3 10 1.11 20 2.22 50 5.55

  26. Map Program typedef std::map<int,double,std::less<int>> mapType; mapType m; • Use a typedef to create a new type name (alias) for map • Makes the code with long type names easier to read • Less<int> is a comparator function object • Sorts the keys in ascending order m.insert( mapType::value_type( 50, 5.55 )); • Creates a map object in which first (50) is the key of type int & second (5.55) is value of type double mapType::const_iterator it; for(it=m.begin();it!=m.end();++it) cout<<it->first<<'\t'<<it->second<<endl; • Uses a constant iterator to access the members of the object m in each element of the map

  27. Stack Container Adapter • Last-in-first-out data structure • Member functions • push() • pop() • empty() • top() • size() • See stack.txt

  28. #include <iostream> using std::cout; using std::endl; #include <stack> template< class T > void popAll(T &s); void main(){ std::stack< int > s; for(int i=1; i<=5; ++i) s.push(i); cout<<"s.size()="<<s.size()<<endl; //s.size()=5 popAll(s); //5 4 3 2 1 } template< class T > void popAll(T &s){ while(!s.empty()) { cout << s.top() << ' '; s.pop(); } }

  29. Algorithms (search.txt) • Basic searching and sorting algorithms • find (iterator1, iterator2, element) • Find the location of the element from iterator1 and up to (but not including) interator2. Returns an iterator. • find_if (iterator1, iterator2, function) • Find the location where the function returns true • sort (iterator1, iterator2) • Sorts the elements between the two iterators • binary search (iterator1, iterator2, element) • Used when elements are already sorted in ascending order

  30. Class Exercise 2 • Write a program that prompts the user to enter 5 integers, put the integers into a vector, sort the integers, and prints the vector

More Related