Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof 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