1 introduction to standard template library (stl) wenguang wang and yanping zhao march 20, 2000

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

Upload: debra-norris

Post on 16-Dec-2015

223 views

Category:

Documents


0 download

TRANSCRIPT

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

1

Introduction toStandard Template Library (STL)

Wenguang Wang and Yanping Zhao

March 20, 2000

Page 2: 1 Introduction to Standard 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…

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

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

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

4

Why we use STL?

• More reliable and efficient implementations

• Automatic memory management• Constructing complex data

structures easily• Saving programming time and

efforts

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

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/

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

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

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

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

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

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

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

9

Vector -- Advantages

• Data type– basic type: integer, double, pointer, …– user-defined structures and classes

• Dynamic size

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

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<int> vec;vec.push_back(i);

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

11

Vector -- Operations

• Property operations– [ ] , size, empty

• Iterator operations– begin, end

• Manipulation operations– push_back, pop_back, insert, erase

00 1 2 3 4 5 6 7

size=8

begin endv[3]

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

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

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

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

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

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

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

15

Algorithm -- Heap

• Data structure: vector or C++ array

• make_heap

• pop_heap

• push_heap

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

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

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

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

17

User-defined Data Type

struct Event {

long timestamp;

int type;

};

typedef Event* PEvent;

typedef vector<Event> VecEvent;

typedef list<PEvent> ListPEvent;

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

18

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?

page

page

page

page

page

page

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

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

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

20

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

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

21

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

22

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

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

23

#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