Introduction to Standard Template Library (STL)

Introduction to Standard Template Library (STL) Wenguang Wang and Yanping Zhao March 20, 2000 1 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… 2 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 3 Why we use STL? • • • • More reliable and efficient implementations Automatic memory management Constructing complex data structures easily Saving programming time and efforts 4 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/ 5 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 6 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 7 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 8 Vector -- Advantages • Data type – basic type: integer, double, pointer, … – user-defined structures and classes • Dynamic size 9 int *array = malloc(size*sizeof(int));//allocate int *temp = realloc(array, new_size*sizeof(int)); if (temp) array = temp; //reallocate How to get the size of the array? free(array); // deallocate Count Count = 0; while(not end) count++; Estimate #define SIZE 2000 vector vec; vec.push_back(i); Vector -- Operations • Property operations – [ ] , size, empty size=8 0 1 2 3 4 5 6 7 begin v[3] end • Iterator operations – begin, end • Manipulation operations – push_back, pop_back, insert, erase 11 #include #include typedef vector 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 #include typedef list 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; } Algorithm -- Heap • Data structure: vector or C++ array • make_heap • pop_heap 8 5 7 4 3 6 1 9 4 1 7 5 3 6 8 9 9 5 8 4 3 6 7 1 • push_heap 9 8 7 5 3 6 1 4 15 #include #include #include typedef vector 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(); } User-defined Data Type struct Event { long timestamp; int type; }; typedef Event* PEvent; typedef vector VecEvent; typedef list ListPEvent; 17 User-defined Data Type (cont.) page page class Page { page page int page_num; int modify_flag; page page int reference_cnt; }; typedef list ListPage; typedef ListPage* PListPage; typedef vector VecPListPage; What is the structure of VecPListPage? 18 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 19 More details in: http://www.cs.usask.ca/grads/wew036/stl 20 21 #include #include void main(void) { vector vInt; vector::iterator begin, end; begin = vInt.begin(); end = vInt.end(); sort(begin, end); } #include //not iostream.h! #include #include #include #include #include #include #include #include #ifdef _MSC_VER // for Visual C++ using namespace std; #endif

Related docs
Introduction to the STL
Views: 13  |  Downloads: 1
STL
Views: 9  |  Downloads: 1
C++�s Standard Template Library (STL)
Views: 16  |  Downloads: 2
The Standard Template Library
Views: 8  |  Downloads: 2
The Standard Template Library
Views: 0  |  Downloads: 0
The Standard Template Library
Views: 0  |  Downloads: 0
Standard Template
Views: 116  |  Downloads: 0
Lab 6 Templates and the STL
Views: 12  |  Downloads: 2
C++ templates and STL
Views: 43  |  Downloads: 10
Other docs by moneu
Job Satisfaction Feedback Form
Views: 796  |  Downloads: 48
Dirty Joke Trust
Views: 851  |  Downloads: 15
Employee hiring package
Views: 822  |  Downloads: 51
Employee Exit Interview
Views: 314  |  Downloads: 12
Maytag Corp Ammendments and Bylaws
Views: 260  |  Downloads: 3
Shareholders Resolution Increasing Capital Stock
Views: 276  |  Downloads: 3