SlideShare a Scribd company logo
1 of 29
STL-Choosing Right
Containers
Sangharsh
Agarwal
Containers
• Sequential containers
– Vector
– Deque
– List
• Associative containers
– Set
– Map
– Multiset
– Multimap
• Container adaptors
– Stack
– Queue
– Priority queue
Memory allocation
Containers Memory Allocation
Vector Contiguous memory
allocation
Deque Memory allocated in chunks
List Node wise memory allocation
Map Binary tree (RGB)
Set Binary tree (RGB)
Multimap Binary tree (RGB)
MultiSet Binary tree (RGB)
Syntax of containers
• Vector
• Deque
• List
template < class T, class Allocator = allocator<T> >
class vector;
template < class T, class Allocator = allocator<T> >
class list;
template < class T, class Allocator = allocator<T> >
class deque;
• Set
• Where the template parameters have the following
meanings:
– Key: Key type: type of the elements contained in the
container. Each elements in a set is also its key.
– Compare: Comparison class. A class that takes two
arguments of the same type as the container
elements and returns a bool.
– Allocator: Type of the allocator object used to define
the storage allocation model. By default, the allocator
class template for type Key is used, which defines the
simplest memory allocation model and is value-
independent.
template < class Key, class Compare = less<Key>,
class Allocator = allocator<Key> > class set;
• Map
• Where the template parameters have the
following meanings:
– Key: Type of the key values. Each element in a map is
uniquely identified by its key value.
– T: Type of the mapped value. Each element in a map is
used to store some data as its mapped value.
– Compare: Comparison class.
– Allocator: Type of the allocator object used to define
the storage allocation model.
template < class Key, class T, class Compare = less<Key>,
class Allocator = allocator<pair<const Key,T> > >
class map;
Usage of containers
Ayes of Vector
• If all you want is a "smart array" class that offers
random access to elements, and perhaps the
ability to append new elements to its end, then
vector is the right choice.
• Accessing individual elements by their position
index (constant time).
• Iterating over the elements in any order (linear
time).
• Add and remove elements from its end (constant
amortized time).
Ayes of Deque
• Deque, provides random access and the subscript
notation for accessing elements, just like vector. Yet
unlike vector, it supports efficient insertions and
deletions at both ends.
• Individual elements can be accessed by their position
index.
• Iteration over the elements can be performed in any
order.
• Elements can be efficiently added and removed from
any of its ends (either the beginning or the end of the
sequence).
• E.g. Operating system's scheduler.
Ayes of List
• Efficient insertion and removal of elements
anywhere in the container (constant time).
• If you don't need random access (say, "15
positions from the beginning" or "three positions
before the current element") and you do need to
insert new elements between existing elements
frequently, then list is a good choice.
• Efficient moving elements and block of elements
within the container or even between different
containers: splice operation (constant time).
• E.g. Window’s task manager
Ayes of Map
• As associative containers, they are especially
designed to be efficient accessing its elements
by their key (unlike sequence containers,
which are more efficient accessing elements
by their relative or absolute position).
• Unique key values: no two elements in the
map have keys that compare equal to each
other
• Each element is composed of a key and a
mapped value.
Ayes of Set
• Internally, the elements in a set are always sorted from
lower to higher following a specific strict weak ordering
criterion set on container construction.
• Unique element values: no two elements in the set
can compare equal to each other. For a similar
associative container allowing for multiple equivalent
elements, see multiset.
• The element value is the key itself. For a similar
associative container where elements are accessed
using a key, but map to a value different than this key,
see map.
Adaptors
• Adaptor containers change ordinary
containers such as vector and deque, making
them look as different container types.
• For example, a stack is usually implemented as
a list with a different interface. Instead
of push_back() and pop_back(), it
has push() and pop().
Stack
• Stack (declared in <stack> ) is an ideal choice
when you need to a LIFO data structure.
• For example, think about people entering the
back seat of a car that has only one door: the
last person to enter is the first to exit.
• The four basic operations that
a stack supports are push(), pop(),top(),
and empty().
Queue
• A queue (declared in <queue> ), or FIFO, is
characterized by having elements inserted into
one end and removed from the other end.
• For example: a queue of people at a theater's
box office.
• The queue adaptor container is implemented
in one of two ways: either as a deque or as
a list.
Note
• As a general rule, always check which unique
operations a certain container supports, and
which common operations it disables. These
should give you more than a hint regarding its
optimal usage.
Nays of containers
Nays of Vector
• When you find yourself, frequently inserting,
removing elements in the middle of the
vector.
• If you think about inserting elements before
the first element, then clearly vector is not the
right choice because it doesn't even have
a push_front() operation.
• Reallocation problem with vector.
• Let's see how this can happen. Suppose you have a
vector that has 256 elements:
vector <int> vi(256); //vi contains 256
int's
• At this point, you define an iterator that is pointing to
the first element like this:
for (vector<int>::iterator it=
vi.begin();...)
• Then, you call push_back() to insert a new element:
vi.push_back(99);
• From this moment, there's no guarantee that it is valid
because the push_back() call may have triggered
reallocation
Nays of List
• When is list a bad choice? First and foremost,
– When you need random access to elements.
– If you need to sort the elements frequently.
Although list does offer the sort()operation,
sorting lists isn't as efficient as sorting vectors.
Nays of Deque
• When you find yourself, frequently inserting,
removing elements in the middle of the
deque.
• Calling insert() in the middle of
the deque invalidates all the iterators and
references to its elements.
• Calling insert() at either end of the deque invalidates all
its iterators but has no effect on the validity of
references to its elements.
After the push_front() call, the iterator it becomes invalid whereas the pointer p remains
valid.
• Similarly, calling erase() in the middle of
the deque invalidates all the iterators and references to
its elements.
• Calling erase() at either end of the deque invalidates
only the iterators and the references to the erased
elements.
deque<int> di;
int p* = &di[5];
deque<int>::iterator
it=di.begin()+5; di.push_front(8);
Vector<bool> ?.......
• The vector class template has a special
template specialization for the bool type.
• This specialization is provided to optimize for
space allocation: In this template
specialization, each element occupies only
one bit (which is eight times less than the
smallest type in C++: char).
• The references to elements of a bool vector
returned by the vector members are not
references to bool objects, but a special
member type which is a reference to a single
bit, defined inside the vector<bool> class
specialization as:
class vector<bool>::reference {
friend class vector;
reference(); // no public
constructor
public:
~reference();
operator bool () const; // convert to bool
reference& operator= ( const bool x ); // assign from bool
reference& operator= ( const reference& x ); // assign from bit
void flip(); // flip bit value.
}
Summary
• If all you want is a "smart array" class that offers
random access to elements, and perhaps the ability to
append new elements to its end, then vector is the
right choice.
• When you need to insert or remove elements at either
end of a container frequently, but you rarely use
insertions and deletions in the middle, deque is a good
choice.
• If you don't need random access (say, "15 positions
from the beginning" or "three positions before the
current element") and you do need to insert new
elements between existing elements frequently,
then list is a good choice.
• As associative containers, they are especially
designed to be efficient accessing its elements
by their key (unlike sequence containers,
which are more efficient accessing elements
by their relative or absolute position).
FAQs?
• Why pop() returns void?
• Default container used to implement Stack
and queue?
References
• Effective STL (Scott Meyers)
• http://www.informit.com/guides/content.aspx
?g=cplusplus&seqNum=205
• http://www.gotw.ca/gotw/054.htm
• http://www.cplusplus.com/reference/stl/

More Related Content

What's hot

Deque and its applications
Deque and its applicationsDeque and its applications
Deque and its applicationsJsaddam Hussain
 
Python Collections Tutorial | Edureka
Python Collections Tutorial | EdurekaPython Collections Tutorial | Edureka
Python Collections Tutorial | EdurekaEdureka!
 
Binary Heap Tree, Data Structure
Binary Heap Tree, Data Structure Binary Heap Tree, Data Structure
Binary Heap Tree, Data Structure Anand Ingle
 
Collections - Lists, Sets
Collections - Lists, Sets Collections - Lists, Sets
Collections - Lists, Sets Hitesh-Java
 
Python decorators
Python decoratorsPython decorators
Python decoratorsAlex Su
 
Introduction to Array ppt
Introduction to Array pptIntroduction to Array ppt
Introduction to Array pptsandhya yadav
 
Collections - Array List
Collections - Array List Collections - Array List
Collections - Array List Hitesh-Java
 
Operator overloading C++
Operator overloading C++Operator overloading C++
Operator overloading C++Lahiru Dilshan
 
Basic data structures in python
Basic data structures in pythonBasic data structures in python
Basic data structures in pythonLifna C.S
 
Inline Functions and Default arguments
Inline Functions and Default argumentsInline Functions and Default arguments
Inline Functions and Default argumentsNikhil Pandit
 
Priority Queue in Data Structure
Priority Queue in Data StructurePriority Queue in Data Structure
Priority Queue in Data StructureMeghaj Mallick
 
Queue data structure
Queue data structureQueue data structure
Queue data structureanooppjoseph
 
Packages In Python Tutorial
Packages In Python TutorialPackages In Python Tutorial
Packages In Python TutorialSimplilearn
 

What's hot (20)

Deque and its applications
Deque and its applicationsDeque and its applications
Deque and its applications
 
Python Collections Tutorial | Edureka
Python Collections Tutorial | EdurekaPython Collections Tutorial | Edureka
Python Collections Tutorial | Edureka
 
Binary Heap Tree, Data Structure
Binary Heap Tree, Data Structure Binary Heap Tree, Data Structure
Binary Heap Tree, Data Structure
 
Collections - Lists, Sets
Collections - Lists, Sets Collections - Lists, Sets
Collections - Lists, Sets
 
Python decorators
Python decoratorsPython decorators
Python decorators
 
Abstract Data Types
Abstract Data TypesAbstract Data Types
Abstract Data Types
 
Python - Lecture 11
Python - Lecture 11Python - Lecture 11
Python - Lecture 11
 
Introduction to Array ppt
Introduction to Array pptIntroduction to Array ppt
Introduction to Array ppt
 
Collections - Array List
Collections - Array List Collections - Array List
Collections - Array List
 
Operator overloading C++
Operator overloading C++Operator overloading C++
Operator overloading C++
 
Basic data structures in python
Basic data structures in pythonBasic data structures in python
Basic data structures in python
 
Inline Functions and Default arguments
Inline Functions and Default argumentsInline Functions and Default arguments
Inline Functions and Default arguments
 
2D Array
2D Array 2D Array
2D Array
 
String in java
String in javaString in java
String in java
 
Priority Queue in Data Structure
Priority Queue in Data StructurePriority Queue in Data Structure
Priority Queue in Data Structure
 
Stacks
StacksStacks
Stacks
 
6-Python-Recursion PPT.pptx
6-Python-Recursion PPT.pptx6-Python-Recursion PPT.pptx
6-Python-Recursion PPT.pptx
 
Queue data structure
Queue data structureQueue data structure
Queue data structure
 
Python array
Python arrayPython array
Python array
 
Packages In Python Tutorial
Packages In Python TutorialPackages In Python Tutorial
Packages In Python Tutorial
 

Similar to How to choose best containers in STL (C++)

Similar to How to choose best containers in STL (C++) (20)

Javasession7
Javasession7Javasession7
Javasession7
 
Collections Training
Collections TrainingCollections Training
Collections Training
 
Dynamic memory allocation and linked lists
Dynamic memory allocation and linked listsDynamic memory allocation and linked lists
Dynamic memory allocation and linked lists
 
Java util
Java utilJava util
Java util
 
oops_final_ppt[1].pptx
oops_final_ppt[1].pptxoops_final_ppt[1].pptx
oops_final_ppt[1].pptx
 
DS Module1 (1).pptx
DS Module1 (1).pptxDS Module1 (1).pptx
DS Module1 (1).pptx
 
C# Non generics collection
C# Non generics collectionC# Non generics collection
C# Non generics collection
 
2CPP16 - STL
2CPP16 - STL2CPP16 - STL
2CPP16 - STL
 
ARRAYS.pptx
ARRAYS.pptxARRAYS.pptx
ARRAYS.pptx
 
02._Object-Oriented_Programming_Concepts.ppt
02._Object-Oriented_Programming_Concepts.ppt02._Object-Oriented_Programming_Concepts.ppt
02._Object-Oriented_Programming_Concepts.ppt
 
Advanced c#
Advanced c#Advanced c#
Advanced c#
 
Acm aleppo cpc training seventh session
Acm aleppo cpc training seventh sessionAcm aleppo cpc training seventh session
Acm aleppo cpc training seventh session
 
STRINGS IN JAVA
STRINGS IN JAVASTRINGS IN JAVA
STRINGS IN JAVA
 
Stack in Sata Structure
Stack in Sata StructureStack in Sata Structure
Stack in Sata Structure
 
MODULE-2.pptx
MODULE-2.pptxMODULE-2.pptx
MODULE-2.pptx
 
Java Programming Comprehensive Guide.pptx
Java Programming Comprehensive Guide.pptxJava Programming Comprehensive Guide.pptx
Java Programming Comprehensive Guide.pptx
 
Assg 14 C++ Standard Template Library (STL)(Extra Credit .docx
Assg 14 C++ Standard Template Library (STL)(Extra Credit .docxAssg 14 C++ Standard Template Library (STL)(Extra Credit .docx
Assg 14 C++ Standard Template Library (STL)(Extra Credit .docx
 
java.pdf
java.pdfjava.pdf
java.pdf
 
Unit 2 linear data structures
Unit 2   linear data structuresUnit 2   linear data structures
Unit 2 linear data structures
 
Collections lecture 35 40
Collections lecture 35 40Collections lecture 35 40
Collections lecture 35 40
 

Recently uploaded

Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...stazi3110
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio, Inc.
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmSujith Sukumaran
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesŁukasz Chruściel
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)jennyeacort
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...Christina Lin
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtimeandrehoraa
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based projectAnoyGreter
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样umasea
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024StefanoLambiase
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesPhilip Schwarz
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEEVICTOR MAESTRE RAMIREZ
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanyChristoph Pohl
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfFerryKemperman
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfAlina Yurenko
 
How to Track Employee Performance A Comprehensive Guide.pdf
How to Track Employee Performance A Comprehensive Guide.pdfHow to Track Employee Performance A Comprehensive Guide.pdf
How to Track Employee Performance A Comprehensive Guide.pdfLivetecs LLC
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...Technogeeks
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Andreas Granig
 

Recently uploaded (20)

2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalm
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New Features
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtime
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based project
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a series
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEE
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdf
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
 
How to Track Employee Performance A Comprehensive Guide.pdf
How to Track Employee Performance A Comprehensive Guide.pdfHow to Track Employee Performance A Comprehensive Guide.pdf
How to Track Employee Performance A Comprehensive Guide.pdf
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024
 

How to choose best containers in STL (C++)

  • 2. Containers • Sequential containers – Vector – Deque – List • Associative containers – Set – Map – Multiset – Multimap • Container adaptors – Stack – Queue – Priority queue
  • 3. Memory allocation Containers Memory Allocation Vector Contiguous memory allocation Deque Memory allocated in chunks List Node wise memory allocation Map Binary tree (RGB) Set Binary tree (RGB) Multimap Binary tree (RGB) MultiSet Binary tree (RGB)
  • 5. • Vector • Deque • List template < class T, class Allocator = allocator<T> > class vector; template < class T, class Allocator = allocator<T> > class list; template < class T, class Allocator = allocator<T> > class deque;
  • 6. • Set • Where the template parameters have the following meanings: – Key: Key type: type of the elements contained in the container. Each elements in a set is also its key. – Compare: Comparison class. A class that takes two arguments of the same type as the container elements and returns a bool. – Allocator: Type of the allocator object used to define the storage allocation model. By default, the allocator class template for type Key is used, which defines the simplest memory allocation model and is value- independent. template < class Key, class Compare = less<Key>, class Allocator = allocator<Key> > class set;
  • 7. • Map • Where the template parameters have the following meanings: – Key: Type of the key values. Each element in a map is uniquely identified by its key value. – T: Type of the mapped value. Each element in a map is used to store some data as its mapped value. – Compare: Comparison class. – Allocator: Type of the allocator object used to define the storage allocation model. template < class Key, class T, class Compare = less<Key>, class Allocator = allocator<pair<const Key,T> > > class map;
  • 9. Ayes of Vector • If all you want is a "smart array" class that offers random access to elements, and perhaps the ability to append new elements to its end, then vector is the right choice. • Accessing individual elements by their position index (constant time). • Iterating over the elements in any order (linear time). • Add and remove elements from its end (constant amortized time).
  • 10. Ayes of Deque • Deque, provides random access and the subscript notation for accessing elements, just like vector. Yet unlike vector, it supports efficient insertions and deletions at both ends. • Individual elements can be accessed by their position index. • Iteration over the elements can be performed in any order. • Elements can be efficiently added and removed from any of its ends (either the beginning or the end of the sequence). • E.g. Operating system's scheduler.
  • 11. Ayes of List • Efficient insertion and removal of elements anywhere in the container (constant time). • If you don't need random access (say, "15 positions from the beginning" or "three positions before the current element") and you do need to insert new elements between existing elements frequently, then list is a good choice. • Efficient moving elements and block of elements within the container or even between different containers: splice operation (constant time). • E.g. Window’s task manager
  • 12. Ayes of Map • As associative containers, they are especially designed to be efficient accessing its elements by their key (unlike sequence containers, which are more efficient accessing elements by their relative or absolute position). • Unique key values: no two elements in the map have keys that compare equal to each other • Each element is composed of a key and a mapped value.
  • 13. Ayes of Set • Internally, the elements in a set are always sorted from lower to higher following a specific strict weak ordering criterion set on container construction. • Unique element values: no two elements in the set can compare equal to each other. For a similar associative container allowing for multiple equivalent elements, see multiset. • The element value is the key itself. For a similar associative container where elements are accessed using a key, but map to a value different than this key, see map.
  • 14. Adaptors • Adaptor containers change ordinary containers such as vector and deque, making them look as different container types. • For example, a stack is usually implemented as a list with a different interface. Instead of push_back() and pop_back(), it has push() and pop().
  • 15. Stack • Stack (declared in <stack> ) is an ideal choice when you need to a LIFO data structure. • For example, think about people entering the back seat of a car that has only one door: the last person to enter is the first to exit. • The four basic operations that a stack supports are push(), pop(),top(), and empty().
  • 16. Queue • A queue (declared in <queue> ), or FIFO, is characterized by having elements inserted into one end and removed from the other end. • For example: a queue of people at a theater's box office. • The queue adaptor container is implemented in one of two ways: either as a deque or as a list.
  • 17. Note • As a general rule, always check which unique operations a certain container supports, and which common operations it disables. These should give you more than a hint regarding its optimal usage.
  • 19. Nays of Vector • When you find yourself, frequently inserting, removing elements in the middle of the vector. • If you think about inserting elements before the first element, then clearly vector is not the right choice because it doesn't even have a push_front() operation.
  • 20. • Reallocation problem with vector. • Let's see how this can happen. Suppose you have a vector that has 256 elements: vector <int> vi(256); //vi contains 256 int's • At this point, you define an iterator that is pointing to the first element like this: for (vector<int>::iterator it= vi.begin();...) • Then, you call push_back() to insert a new element: vi.push_back(99); • From this moment, there's no guarantee that it is valid because the push_back() call may have triggered reallocation
  • 21. Nays of List • When is list a bad choice? First and foremost, – When you need random access to elements. – If you need to sort the elements frequently. Although list does offer the sort()operation, sorting lists isn't as efficient as sorting vectors.
  • 22. Nays of Deque • When you find yourself, frequently inserting, removing elements in the middle of the deque. • Calling insert() in the middle of the deque invalidates all the iterators and references to its elements.
  • 23. • Calling insert() at either end of the deque invalidates all its iterators but has no effect on the validity of references to its elements. After the push_front() call, the iterator it becomes invalid whereas the pointer p remains valid. • Similarly, calling erase() in the middle of the deque invalidates all the iterators and references to its elements. • Calling erase() at either end of the deque invalidates only the iterators and the references to the erased elements. deque<int> di; int p* = &di[5]; deque<int>::iterator it=di.begin()+5; di.push_front(8);
  • 24. Vector<bool> ?....... • The vector class template has a special template specialization for the bool type. • This specialization is provided to optimize for space allocation: In this template specialization, each element occupies only one bit (which is eight times less than the smallest type in C++: char).
  • 25. • The references to elements of a bool vector returned by the vector members are not references to bool objects, but a special member type which is a reference to a single bit, defined inside the vector<bool> class specialization as: class vector<bool>::reference { friend class vector; reference(); // no public constructor public: ~reference(); operator bool () const; // convert to bool reference& operator= ( const bool x ); // assign from bool reference& operator= ( const reference& x ); // assign from bit void flip(); // flip bit value. }
  • 26. Summary • If all you want is a "smart array" class that offers random access to elements, and perhaps the ability to append new elements to its end, then vector is the right choice. • When you need to insert or remove elements at either end of a container frequently, but you rarely use insertions and deletions in the middle, deque is a good choice. • If you don't need random access (say, "15 positions from the beginning" or "three positions before the current element") and you do need to insert new elements between existing elements frequently, then list is a good choice.
  • 27. • As associative containers, they are especially designed to be efficient accessing its elements by their key (unlike sequence containers, which are more efficient accessing elements by their relative or absolute position).
  • 28. FAQs? • Why pop() returns void? • Default container used to implement Stack and queue?
  • 29. References • Effective STL (Scott Meyers) • http://www.informit.com/guides/content.aspx ?g=cplusplus&seqNum=205 • http://www.gotw.ca/gotw/054.htm • http://www.cplusplus.com/reference/stl/