240 likes | 415 Views
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
E N D
Introduction toStandard 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 • Searching, sorting, heap, merging, copying, transforming…
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
Why we use STL? • More reliable and efficient implementations • Automatic memory management • Constructing complex data structures easily • Saving programming time and efforts
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/
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
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
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
Vector -- Advantages • Data type • basic type: integer, double, pointer, … • user-defined structures and classes • Dynamic size
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);
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
#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); }
List -- Operations • Property operations • size, empty • back, front • Iterator operations • begin, end • Manipulation operations • push_back, pop_back, push_front, pop_front • insert, erase
#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; }
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
#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(); }
User-defined Data Type struct Event { long timestamp; int type; }; typedef Event* PEvent; typedef vector<Event> VecEvent; typedef list<PEvent> ListPEvent;
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?
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
Questions? More details in: http://www.cs.usask.ca/grads/wew036/stl
#include <vector> #include <algorithm> void main(void) { vector<int> vInt; vector<int>::iterator begin, end; begin = vInt.begin(); end = vInt.end(); sort(begin, end); }
#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