1 / 23

Introduction to Standard Template Library (STL)

Introduction to Standard Template Library (STL). Wenguang Wang and Yanping Zhao March 20, 2000. What Is STL?. A new C++ Library, ANSI standard Support complex data structures Vector (array), list, string, hash, set, map, queue, stack, priority queue... Support various algorithms

aquene
Download Presentation

Introduction to Standard Template Library (STL)

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. Introduction toStandard Template Library (STL) Wenguang Wang and Yanping Zhao March 20, 2000

  2. What Is STL? • A new C++ Library, ANSI standard • Support complex data structures • Vector (array), list, string, hash, set, map, queue, stack, priority queue... • Support various algorithms • Searching, sorting, heap, merging, copying, transforming…

  3. Why STL was developed? • Some basic data structures are used everyday in your programs • Programming them from the scratch is time consuming and error-prone • Most of operations on these structures can be standardized

  4. Why we use STL? • More reliable and efficient implementations • Automatic memory management • Constructing complex data structures easily • Saving programming time and efforts

  5. Where are STL and resources? • GNU g++ on skorpio, ultra*… • Visual C++ • Wenguang Wang’s home page • http://www.cs.usask.ca/grads/wew036/stl • Standard Template Library Programmer’s Guide • http://www.sgi.com/Technology/STL/

  6. Fundamental Elements in STL? • Containers (data structures) • vector dynamic size • list doubly linked list • string, hash • Algorithms • sorting, heap manipulation • Iterators (pointers) • A bridge to connect algorithms and containers • Example

  7. How to Use STL? (example) • On Unix • GNU g++ 2.7.0 and later version • On Windows • Visual C++ 5.0 and later version • not fully supported even in Visual C++ 6.0 • no hash table • no rope • more? • Example

  8. Why I am here? • I learned STL two weeks ago • I never heard of STL before • After a five minutes STL tour, I can use it ! • I found that STL helped me a lot in programming • I want to share it with you

  9. Vector -- Advantages • Data type • basic type: integer, double, pointer, … • user-defined structures and classes • Dynamic size

  10. int *array = malloc(size*sizeof(int));//allocate int *temp = realloc(array, new_size*sizeof(int)); if (temp) array = temp; //reallocate free(array); // deallocate How to get the size of the array? Count Estimate Count = 0; while(not end) count++; #define SIZE 2000 vector<int> vec; vec.push_back(i);

  11. size=8 0 0 1 2 3 4 5 6 7 begin v[3] end Vector -- Operations • Property operations • [ ] , size, empty • Iterator operations • begin, end • Manipulation operations • push_back, pop_back, insert, erase

  12. #include <vector> #include <iostream> typedef vector<int> VecInt; void main(){ VecInt vInt; VecInt::iterator it; vInt.push_back(0); vInt.push_back(1); for (it=vInt.begin(); it!=vInt.end(); it++) cout << *it << endl; for (int i=0; i<vInt.size(); i++) cout << vInt[i] << endl; it = vInt.insert(vInt.begin(), 2); vInt.erase(it); }

  13. List -- Operations • Property operations • size, empty • back, front • Iterator operations • begin, end • Manipulation operations • push_back, pop_back, push_front, pop_front • insert, erase

  14. #include <list> #include <iostream> typedef list<int> ListInt; void main(){ ListInt lInt; ListInt::iterator it; // stack lInt.push_front(0); lInt.push_front(1); cout << lInt.front() << endl; lInt.pop_front(); lInt.pop_front(); // queue lInt.push_back(2); lInt.push_back(3); cout << lInt.front() << endl; lInt.pop_front(); lInt.pop_front(); // iterator for (it=lInt.begin(); it!=lInt.end(); it++) cout << *it << endl; }

  15. 4 1 7 5 3 6 8 9 9 5 8 4 3 6 7 1 8 5 7 4 3 6 1 9 9 8 7 5 3 6 1 4 Algorithm -- Heap • Data structure: vector or C++ array • make_heap • pop_heap • push_heap

  16. #include <vector> #include <algorithm> #include <iostream> typedef vector<int> VecInt; void main(){ VecInt vInt(4); int i; vInt[0]=7; vInt[1]=4; vInt[2]=9; vInt[3]=1; make_heap(vInt.begin(), vInt.end()); vInt.push_back(3); push_heap(vInt.begin(), vInt.end()); pop_heap(vInt.begin(), vInt.end()); cout << vInt.back() << endl; vInt.pop_back(); }

  17. User-defined Data Type struct Event { long timestamp; int type; }; typedef Event* PEvent; typedef vector<Event> VecEvent; typedef list<PEvent> ListPEvent;

  18. page page page page page page User-defined Data Type (cont.) class Page { int page_num; int modify_flag; int reference_cnt; }; typedef list<Page> ListPage; typedef ListPage* PListPage; typedef vector<PListPage> VecPListPage; What is the structure of VecPListPage?

  19. Iterator • Similar to pointer • *it • Iterator for list (bidirectional iterator) • ++it, it++, --it, it-- • Iterator for vector (random access iterator) • ++it, it++, --it, it-- • it+n, itBegin-itEnd

  20. Questions? More details in: http://www.cs.usask.ca/grads/wew036/stl

  21. #include <vector> #include <algorithm> void main(void) { vector<int> vInt; vector<int>::iterator begin, end; begin = vInt.begin(); end = vInt.end(); sort(begin, end); }

  22. #include <iostream> //not iostream.h! #include <cstdio> #include <cstdlib> #include <vector> #include <list> #include <set> #include <map> #include <string> #include <algorithm> #ifdef _MSC_VER // for Visual C++ using namespace std; #endif

More Related