Survey
* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project
Basic ADTs in STL
What are ADTs,
STL Intro, vector, list, queue, stack
Telerik Software Academy
Learning & Development Team
http://academy.telerik.com
Table of Contents
1.
Basic Abstract Data Types
1. List
2. Linked List
3. Stack
4. Queue
2.
ADTs in STL
1. STL Intro
2. Iterators
3. Vector, list, stack, queue
2
Abstract Data Types
Basic 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 contains
a 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
0
L
1
2
3
4
2 18 7 12 3
5
6
7
6 11 9
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
head
2
7
4
5
next
next
next
next
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
Statically (using array)
Dynamically (using pointers)
ways
Standard Template Library
Introduction, 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
iterators
15
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 Introduction
Live Demo
STL Iterators
Mechanism 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 Containers
Fast 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 Containers
Vector, 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
#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 size and is obtained by calling
vector<int> numbers;
numbers.push_back(42);
numbers.push_back(13);
cout<<numbers.size(); //prints 2
size()
STL Vector
Accessing vector elements
Done the same way as with arrays, i.e. []
vector<int> numbers;
numbers.push_back(42);
numbers.push_back(13);
cout<<numbers[1]; //prints 13
cout<<endl;
numbers[1] = numbers[0];
cout<<numbers[1]; //prints 42
Traversing a vector is the same as traversing an
array (e.g. with a for loop)
Element access does not depend on vector size
STL vector
Live Demo
STL (Linked) List
List (#include
<list>)
Defined: template <class T> list
Sequence, Reversible
Stores a sequence of elements in a doublylinked 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<int> numbers;
numbers.push_back(2);
numbers.push_front(1);
numbers.push_back(3);
List size and is obtained by calling
size()
List elements can be removed from front and
back fast
numbers.pop_front();
numbers.pop_back();
STL (Linked) List
Accessing list
elements
front and back methods provide first and last
element access
cout<<numbers.front();
cout<<numbers.back();
Only way to get access to all elements –
traversal by iterator
list<int>::iterator numbersIterator;
for(numbersIterator = numbers.begin();
numbersIterator != numbers.end();
numbersIterator++)
{
cout<<*numbersIterator<<endl;
}
STL list
Live 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<int> q;
q.push(1);
q.push(2);
q.push(3);
Queue size is obtained by calling
Queues allow
size()
removing elements only from
the front of the sequence
q.pop();
STL Queue
Accessing
queue elements
front and back methods provide first and last
element access
cout<<q.front();
cout<<q.back();
Other types of access to queue elements are
meaningless
The idea of the queue is to restrict access and be
FIFO
STL queue
Live 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<int> s;
s.push(1);
s.push(2);
s.push(3);
Stack size is obtained by calling
Stacks allow
size()
removing elements only from the
back (top) of the sequence
s.pop();
STL Stack
Accessing
stack elements
top method provides first element access
cout<<s.top();
Other types of access to stack elements are
meaningless
The idea of the stack is to restrict access and be
LIFO
STL stack
Live Demo
Basic ADTs in STL
курсове и уроци по програмиране, уеб дизайн – безплатно
курсове и уроци по програмиране – Телерик академия
уроци по програмиране и уеб дизайн за ученици
програмиране за деца – безплатни курсове и уроци
безплатен SEO курс - оптимизация за търсачки
курсове и уроци по програмиране, книги – безплатно от Наков
уроци по уеб дизайн, HTML, CSS, JavaScript, Photoshop
free C# book, безплатна книга C#, книга Java, книга C#
безплатен курс "Качествен програмен код"
безплатен курс "Разработка на софтуер в cloud среда"
BG Coder - онлайн състезателна система - online judge
форум програмиране, форум уеб дизайн
ASP.NET курс - уеб програмиране, бази данни, C#, .NET, ASP.NET
ASP.NET MVC курс – HTML, SQL, C#, .NET, ASP.NET MVC
алго академия – състезателно програмиране, състезания
курс мобилни приложения с iPhone, Android, WP7, PhoneGap
Дончо Минков - сайт за програмиране
Николай Костов - блог за програмиране
C# курс, програмиране, безплатно
http://algoacademy.telerik.com
Exercises
1.
…
41