Basic ADTs in STL

Post on 22-Feb-2016

52 views 0 download

Tags:

description

Basic ADTs in STL. What are ADTs, STL Intro, vector, list, queue, stack. Learning & Development Team. http://academy.telerik.com. Telerik Software Academy. Table of Contents. Basic Abstract Data Types List Linked List Stack Queue ADTs in STL STL Intro Iterators - PowerPoint PPT Presentation

Transcript of Basic ADTs in STL

Basic ADTs in STLWhat are ADTs,

STL Intro, vector, list, queue, stack

Learning & Development Teamhttp://academy.telerik.com

Telerik Software Academy

Table of Contents1. Basic Abstract Data Types

1.List2.Linked List3.Stack4.Queue

2. ADTs in STL1.STL Intro2.Iterators3.Vector, list, stack, queue 2

Abstract Data TypesBasic Data Structures

Abstract Data Types An Abstract Data Type (ADT) is a data type together with the operations, whose properties are specified independently of any particular implementation ADT are set of definitions of operations Can have several different implementations Different implementations can have different efficiency

Basic Data Structures Linear structures Lists: fixed size and variable size Stacks: LIFO (Last In First Out) structure Queues: FIFO (First In First Out) structure

Trees Binary, ordered, balanced, etc.

Dictionaries (maps) Contain pairs (key, value) Hash tables: use hash functions to search/insert

Lists

The List ADT Data structure (container) that containsa sequence of elements Can have variable size Elements are arranged linearly, in sequence

Can be implemented in several ways Statically (using array fixed size) Dynamically (linked implementation) Using resizable array

Static List Implemented by an array Direct access by index (fast) Insertion and deletion and resizing

are slow operations

L 2 18 7 1

2 3 6 11 9

0 1 2 3 4 5 6 7

Linked List Dynamic (pointer-based) implementation Direct access to first/last element No access by index

go through all previous elements (slow) Insertion and deletion are fast Resizing – add new element at the end or beginning

2next

7next

head4next

5next

null

Stacks

The Stack ADT LIFO (Last In First Out) structure Elements inserted (push) at “top” Elements removed (pop) from “top” Useful in many situations

E.g. the execution stack of the program Can be implemented in several ways

Statically (using array) Dynamically (linked implementation)

Queues

The Queue ADT FIFO (First In First Out) structure Elements inserted at the tail (Enqueue)

Elements removed from the head (Dequeue)

Useful in many situations Print queues, message queues, etc.

Can be implemented in several ways Statically (using array) Dynamically (using pointers)

Standard Template LibraryIntroduction, Basic ADT

Implementations

STL Introduction Standard Template Library

C++ Library Implements a lot of computer

science fundamentals Container classes, Algorithms

Iterators Mostly template-based Algorithms decoupled from

containers through iterators15

STL Introduction Containers

Data structures, hold collections of elements

Different benefits and downsides Implement fundamental Abstract

Data Types Sequence, Associative, String,

Adaptors… Iterators

Provide access to container elements

Used to "traverse" containers

16

STL Introduction Algorithms

Fundamental algorithms over collections or single

Hook up with iterators to access container elements

Function objects Wrap functions/methods into

objects Implement () operator – called like

functions Called by algorithms and containers

to act over elements (elements passed as parameters)

17

STL IntroductionLive Demo

STL IteratorsMechanism for traversing container

elements

STL Iterators "Smart" pointers to objects Specific for each container type

Each container defines how it’s iterators work

If we have an iterator to one element Increase/decrease it to get the

other elements Types:

Input, Output Forward iterator, Bidirectional

iterator Random access iterator

20

STL ContainersFast data structures to store elements

STL Containers Store collections of other objects Has methods to access elements Types

By traversability: Forward – elements ordered, Forward

Iterators Reversible – have Bidirectional

iterators Random access – have Random

access iterators By storage:

sequence, adaptors, associative

22

Basic STL ContainersVector, List, Deque, Queue, Stack

STL Vector Vector (#include <vector>)

Defined: template <class T> vector Sequence, Random Access Stores a sequence of elements in

contiguous memory Manages memory effectively Fast at retrieving elements by index

and adding elements at the end Slow insertion/deletion in middle or

beginning 24

STL Vector Declaring and initializing a vector

Vector size and is obtained by calling size()

#include<vector> //required header…vector<int> numbers;numbers.push_back(42); //numbers is now {42}numbers.push_back(13); //numbers is now {42, 13}int consoleNumber; cin>>consoleNumber;numbers.push_back(consoleNumber)

vector<int> numbers;numbers.push_back(42);numbers.push_back(13);cout<<numbers.size(); //prints 2

STL Vector Accessing vector elements

Done the same way as with arrays, i.e. []

Traversing a vector is the same as traversing an array (e.g. with a for loop)

Element access does not depend on vector size

vector<int> numbers;numbers.push_back(42);numbers.push_back(13);cout<<numbers[1]; //prints 13cout<<endl;numbers[1] = numbers[0];cout<<numbers[1]; //prints 42

STL vectorLive Demo

STL (Linked) List List (#include <list>)

Defined: template <class T> list Sequence, Reversible Stores a sequence of elements in a

doubly-linked list Fast at deletion/insertion anywhere No random access to elements

Have to traverse list to get to an item

28

STL (Linked) List Declaring and initializing a list

List size and is obtained by calling size()

List elements can be removed from front and back fast

list<int> numbers;

numbers.push_back(2);numbers.push_front(1);numbers.push_back(3);

numbers.pop_front();numbers.pop_back();

STL (Linked) List Accessing list elements

front and back methods provide first and last element access

Only way to get access to all elements – traversal by iterator

cout<<numbers.front();cout<<numbers.back();

list<int>::iterator numbersIterator;for(numbersIterator = numbers.begin(); numbersIterator != numbers.end(); numbersIterator++){ cout<<*numbersIterator<<endl;}

STL listLive Demo

STL Queue Queue (#include<queue>)

Defined: template <class T> queue Sequence Adaptor First in, First out structure (FIFO) Stores a sequence of elements Provides access only to first

element Can remove only at front Can add only at back

32

STL Queue Declaring and initializing a queue

Queue size is obtained by calling size()

Queues allow removing elements only from the front of the sequence

queue<int> q;

q.push(1);q.push(2);q.push(3);

q.pop();

STL Queue Accessing queue elements

front and back methods provide first and last element access

Other types of access to queue elements are meaningless

The idea of the queue is to restrict access and be FIFO

cout<<q.front();cout<<q.back();

STL queueLive Demo

STL Stack Stack (#include <stack>)

Defined: template <class T> stack Sequence adaptor Last in, First out structure (LIFO) Stores a sequence of elements Provides access only to last element Can remove or add elements only at

back/top

36

STL Stack Declaring and initializing a stack

Stack size is obtained by calling size()

Stacks allow removing elements only from the back (top) of the sequence

stack<int> s;

s.push(1);s.push(2);s.push(3);

s.pop();

STL Stack Accessing stack elements

top method provides first element access

Other types of access to stack elements are meaningless

The idea of the stack is to restrict access and be LIFO

cout<<s.top();

STL stackLive Demo

форум програмиране, форум уеб дизайнкурсове и уроци по програмиране, уеб дизайн – безплатно

програмиране за деца – безплатни курсове и уроцибезплатен SEO курс - оптимизация за търсачки

уроци по уеб дизайн, HTML, CSS, JavaScript, Photoshop

уроци по програмиране и уеб дизайн за ученициASP.NET MVC курс – HTML, SQL, C#, .NET, ASP.NET MVC

безплатен курс "Разработка на софтуер в cloud среда"

BG Coder - онлайн състезателна система - online judge

курсове и уроци по програмиране, книги – безплатно от Наков

безплатен курс "Качествен програмен код"

алго академия – състезателно програмиране, състезанияASP.NET курс - уеб програмиране, бази данни, C#, .NET, ASP.NET

курсове и уроци по програмиране – Телерик академия

курс мобилни приложения с iPhone, Android, WP7, PhoneGapfree C# book, безплатна книга C#, книга Java, книга C# Дончо Минков - сайт за програмиране

Николай Костов - блог за програмиранеC# курс, програмиране, безплатно

?? ? ?

??? ?

?

? ?

??

?

?

? ?

Questions?

?

Basic ADTs in STL

http://algoacademy.telerik.com

Exercises

41

1. …