Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 Introduction to Standard Template Library (STL) Wenguang Wang and Yanping Zhao March 20, 2000.

Similar presentations


Presentation on theme: "1 Introduction to Standard Template Library (STL) Wenguang Wang and Yanping Zhao March 20, 2000."— Presentation transcript:

1 1 Introduction to Standard Template Library (STL) Wenguang Wang and Yanping Zhao March 20, 2000

2 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 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 4 Why we use STL? More reliable and efficient implementations Automatic memory management Constructing complex data structures easily Saving programming time and efforts

5 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 6 Fundamental Elements in STL? Containers (data structures) –vectordynamic size –listdoubly linked list –string, hash Algorithms –sorting, heap manipulation Iterators (pointers) –A bridge to connect algorithms and containers –ExampleExample

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

8 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 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 Estimate #define SIZE 2000 Count Count = 0; while(not end) count++; How to get the size of the array? vector vec; vec.push_back(i);

11 11 Vector -- Operations Property operations –[ ], size, empty Iterator operations –begin, end Manipulation operations –push_back, pop_back, insert, erase size=8 beginendv[3]

12 #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

13 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 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; }

15 15 Algorithm -- Heap Data structure: vector or C++ array make_heap pop_heap push_heap

16 #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(); }

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

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

19 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 20 More details in:

21 21

22 #include void main(void) { vector vInt; vector ::iterator begin, end; begin = vInt.begin(); end = vInt.end(); sort(begin, end); }

23 #include //not iostream.h! #include #ifdef _MSC_VER // for Visual C++ using namespace std; #endif


Download ppt "1 Introduction to Standard Template Library (STL) Wenguang Wang and Yanping Zhao March 20, 2000."

Similar presentations


Ads by Google