Lecture 8 : Intro. to STL (Standard Template Library)

Slides:



Advertisements
Similar presentations
Hold data and provide access to it. Random-access containers: -Allow accessing any element by index -arrays, vectors Sequential containers: -Allow accessing.
Advertisements

SEG4110 – Advanced Software Design and Reengineering TOPIC J C++ Standard Template Library.
More on the STL vector list stack queue priority_queue.
1 Standard Containers: Lists Gordon College Resource:
1 Queues and Priority Queues Chapter 8. 2 Introduction to Queues A queue is a waiting line – seen in daily life –Real world examples – toll booths, bank,
Standard Template Library (STL) Overview – Part 1 Yngvi Bjornsson.
1 Stack Data : a collection of homogeneous elements arranged in a sequence. Only the first element may be accessed Main Operations: Push : insert an element.
Lecture 11 Standard Template Library Stacks, Queue, and Deque Lists Iterators Sets Maps.
Data Structures Using C++ 2E
Copyright © 2011 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with C++ Early Objects Seventh Edition by Tony Gaddis, Judy.
Containers Overview and Class Vector
DATA STRUCTURES AND ALGORITHMS Lecture Notes 12 Prepared by İnanç TAHRALI.
Introduction to STL and the vector container class CS342 Data Structures Based on Ford & Topp.
Main Index Contents 11 Main Index Contents Week 3 – The Vector Container.
Nirmalya Roy School of Electrical Engineering and Computer Science Washington State University Cpt S 122 – Data Structures Standard Template Library (STL)
C++ STL CSCI 3110.
STL List // constructing lists #include int main () { // constructors used in the same order as described above: std::list first; // empty list of ints.
CSE 332: C++ STL containers Review: C++ Standard Template Library (STL) The STL is a collection of related software elements –Containers Data structures:
Templates code reuse - inheritance - template classes template classes - a class that is not data-type specific - eg. a class of Array of any type - intArray,
Friends & Standard Template Library CSCI3110 Advanced Data Structures Lecturer: Dr. Carroll and Nan Chen.
Standard Template Library The Standard Template Library was recently added to standard C++. –The STL contains generic template classes. –The STL permits.
Introduction to the Standard Template Library (STL) A container class holds a number of similar objects. Examples: –Vector –List –Stack –Queue –Set –Map.
Lecture 11 Standard Template Library Lists Iterators Sets Maps.
Lecture 7 : Intro. to STL (Standard Template Library)
Computer Science and Software Engineering University of Wisconsin - Platteville 11.Standard Template Library Yan Shi CS/SE 2630 Lecture Notes.
STL – Standard Template Library L. Grewe. 2 Goals Lots of important algorithms, data structures in CS using Templates. is a software library partially.
C++ Review STL CONTAINERS.
Vectors CSci 588: Data Structures, Algorithms and Software Design Fall 2011 All material not from online sources copyright © Travis Desell, 2011
Glenn Stevenson CSIS 113A MSJC CSIS 123A Lecture 3 Vectors.
Chapter 17 – Templates. Function Templates u Express general form for a function u Example: template for adding two numbers Lesson 17.1 template Type.
Unit VI.  C++ templates are a powerful mechanism for code reuse, as they enable the programmer to write code (classes as well as functions) that behaves.
1 The Standard Template Library The STL is a collection of Container classes These are class templates for containers. A container is an object that stores.
Object-Oriented Programming (OOP) Lecture No. 41
Lecture 35a OOP The STL Standard Template Library
Standard Template Library
CS212: Object Oriented Analysis and Design
Introduction to olympic programming
Concepts of Programming Languages
Standard Template Library
Lecture 7-2 : STL Iterators
Vectors Holds a set of elements, like an array
Standard Template Library (STL)
ENERGY 211 / CME 211 Lecture 19 November 3, 2008.
C++ Programming Standard Library
Collections Intro What is the STL? Templates, collections, & iterators
Prof. Michael Neary Lecture 7: The STL Prof. Michael Neary
Basic Data Structures.
Abstract Data Types Iterators Vector ADT Sections 3.1, 3.2, 3.3, 3.4
Lecture 7-2 : STL Iterators
Object Oriented Programming COP3330 / CGS5409
Today’s Learning Objective
Chapter 3 Lists, Stacks, and Queues Abstract Data Types, Vectors
Introduction to C++ STL
priority_queue<T>
Recursive Linked List Operations
Chapter 17: Linked Lists.
Copyright © – Curt Hill STL List Details Copyright © – Curt Hill.
Standard Template Library (STL)
Lecture 8-2 : STL Iterators and Algorithms
C++ STL Stack, Queue, and Deque
STL (Standard Template Library)
Standard Template Library
STL List.
C++ Programming: chapter 10 – STL
Collections Intro What is the STL? Templates, collections, & iterators
Standard Template Library
An Introduction to STL.
STL List.
Standard Template Library
Presentation transcript:

Lecture 8 : Intro. to STL (Standard Template Library)

STL a set of C++ template classes to provide common programming data structures and functions expandable arrays (vector) doubly linked lists (list) Deque , stack , … Partially included in C++ standard library

3 categories of STL Container classes Iterators Algorithms Data structures capable of storing objects of any (user-defined/built-in) data type Iterators similar to pointer (point to element of container) Implemented for each type of container Elements of containers can be accessed through iterators Algorithms Perform operations(e.g. search and sorting) on STL objects

Container Classes Sequences : sequential collection vector, list, deque (double ended queue) Associative Container : set (duplicate data are not allowed) : Collection of ordered data in a balanced BST. Fast search map : associate key-value pair held in balanced BST hash_set, hash_set Container Adapters Implemented on top of another container stack , queue , priority queue

Iterators Iterators provide uniform ways to go over the elements of the STL containers, as well as arrays. There are iterators for going sequentially forward and/or backward as well as random access iterators. Iterators are used by the STL algorithms. Iterator syntax uses the ++, --, and * operators which are familiar to users of pointers.

Sequence Containers: Access, Add, Remove Element access for all: front() back() Element access for vector and deque: [ ]: Subscript operator, index not checked Add/remove elements for all push_back(): Append element. pop_back(): Remove last element Add/remove elements for listand deque: push_front(): Insert element at the front. pop_front(): Remove first element.

Sequence Containers: Other Operations Miscellaneous operations for all: size(): Returns the number of elements. empty(): Returns true if the sequence is empty. resize(int i): Change size of the sequence. Comparison operators == !=<etc. are also defined. i.e., you can compare if two containers are equal. ''List'' operations are fast for list, but also available for vectorand deque: insert(p, x): Insert an element at a given position. erase(p): Remove an element. clear(): Erase all elements.

vector Dynamic array of variables, struct or objects. elements are stored in contiguous storage locations Able to resize itself automatically when inserting or erasing a vector element vector is good at Accessing individual elements by their position index, O(1). (random access) Iterating over the elements in any order (linear time). Add and remove elements from its end What about inserting/erasing a middle element? merging/splitting?

Vector declaration Header file include Declare : Dynamic allocation #include <vector> Declare : vector<data type> variable_name; Ex) vector<int> vec_int; Dynamic allocation Ex) vector<int>* vec_intp = new vector<int>;

vector member functions

vector member functions

vector example1 The contents of fifth are: 16 2 77 29 // constructing vectors #include <iostream> #include <vector> using namespace std; int main () { unsigned int i; // constructors used in the same order as described above: vector<int> first; // empty vector of ints vector<int> second (4,100); // four ints with value 100 vector<int> third (second.begin(),second.end()); // iterating through second vector<int> fourth (third); // a copy of third // the iterator constructor can also be used to construct from arrays: int myints[] = {16,2,77,29}; vector<int> fifth (myints, myints + sizeof(myints) / sizeof(int) ); cout << "The contents of fifth are:"; for (i=0; i < fifth.size(); i++) cout << " " << fifth[i]; cout << endl; return 0; } The contents of fifth are: 16 2 77 29

vector example2 myvector contains: 1 2 3 4 5 // vector::begin #include <iostream> #include <vector> using namespace std; int main () { vector<int> myvector; for (int i=1; i<=5; i++) myvector.push_back(i); vector<int>::iterator it; cout << "myvector contains:"; for ( it=myvector.begin() ; it < myvector.end(); it++ ) cout << " " << *it; cout << endl; return 0; } myvector contains: 1 2 3 4 5

vector example 3 The elements of myvector summed 600 // vector::pop_back #include <iostream> #include <vector> using namespace std; int main () { vector<int> myvector; int sum (0); myvector.push_back (100); myvector.push_back (200); myvector.push_back (300); while (!myvector.empty()) sum+=myvector.back(); myvector.pop_back(); } cout << "The elements of myvector summed " << sum << endl; return 0; The elements of myvector summed 600

vector example4 size: 100 capacity: 141 max_size: 1073741823 // comparing size, capacity and max_size #include <iostream> #include <vector> using namespace std; int main () { vector<int> myvector; // set some content in the vector: for (int i=0; i<100; i++) myvector.push_back(i); cout << "size: " << (int) myvector.size() << "\n"; cout << "capacity: " << (int) myvector.capacity() << "\n"; cout << "max_size: " << (int) myvector.max_size() << "\n"; return 0; } size: 100 capacity: 141 max_size: 1073741823

vector example5 myvector contains: 4 5 7 8 9 10 // erasing from vector #include <iostream> #include <vector> using namespace std; int main () { unsigned int i; vector<unsigned int> myvector; // set some values (from 1 to 10) for (i=1; i<=10; i++) myvector.push_back(i); // erase the 6th element myvector.erase (myvector.begin()+5); // erase the first 3 elements: myvector.erase (myvector.begin(),myvector.begin()+3); cout << "myvector contains:"; for (i=0; i<myvector.size(); i++) cout << " " << myvector[i]; cout << endl; return 0; } myvector contains: 4 5 7 8 9 10

stack (LIFO) Member functions constuctor ex) stack<int, vector<int> > st; // empty stack using vector empty size top push pop

stack example Popping out elements... 4 3 2 1 0 // stack::push/pop #include <iostream> #include <stack> using namespace std; int main () { stack<int> mystack; for (int i=0; i<5; ++i) mystack.push(i); cout << "Popping out elements..."; while (!mystack.empty()) cout << " " << mystack.top(); mystack.pop(); } cout << endl; return 0; Popping out elements... 4 3 2 1 0

list Doubly-linked list Fast access to front and back only Add and remove elements at any position

list member functions

list member functions

list example 1 push_front, push_back pop_front, pop_back // list::push_front #include <iostream> #include <list> using namespace std; int main () { list<int> mylist (2,100); // two ints with a value of 100 mylist.push_front (200); mylist.push_front (300); cout << "mylist contains:"; for (list<int>::iterator it=mylist.begin(); it!=mylist.end(); ++it) cout << " " << *it; cout << endl; return 0; } 300 200 100 100

list example 2 insert mylist contains: 1 10 20 30 30 20 2 3 4 5 // inserting into a list #include <iostream> #include <list> #include <vector> using namespace std; int main () { list<int> mylist; list<int>::iterator it; // set some initial values: for (int i=1; i<=5; i++) mylist.push_back(i); // 1 2 3 4 5 it = mylist.begin(); ++it; // it points now to number 2 mylist.insert (it,10); // 1 10 2 3 4 5 // "it" still points to number 2 mylist.insert (it,2,20); // 1 10 20 20 2 3 4 5 --it; // it points now to the second 20 vector<int> myvector (2,30); mylist.insert (it,myvector.begin(),myvector.end()); // 1 10 20 30 30 20 2 3 4 5 cout << "mylist contains:"; for (it=mylist.begin(); it!=mylist.end(); it++) cout << " " << *it; cout << endl; return 0; } mylist contains: 1 10 20 30 30 20 2 3 4 5

Standard Sequence Containers They differ in how quickly different access operations can be performed. n is the number of elements currently in the container.