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 (20)

Control flow statements in java
Control flow statements in javaControl flow statements in java
Control flow statements in java
 
Android adapters
Android adaptersAndroid adapters
Android adapters
 
String functions and operations
String functions and operations String functions and operations
String functions and operations
 
Intermediate code generation in Compiler Design
Intermediate code generation in Compiler DesignIntermediate code generation in Compiler Design
Intermediate code generation in Compiler Design
 
User Defined Functions
User Defined FunctionsUser Defined Functions
User Defined Functions
 
Numeric Data types in Python
Numeric Data types in PythonNumeric Data types in Python
Numeric Data types in Python
 
C++ Standard Template Library
C++ Standard Template LibraryC++ Standard Template Library
C++ Standard Template Library
 
Generics
GenericsGenerics
Generics
 
C++ Language
C++ LanguageC++ Language
C++ Language
 
11 constructors in derived classes
11 constructors in derived classes11 constructors in derived classes
11 constructors in derived classes
 
Java Collections
Java  Collections Java  Collections
Java Collections
 
C++ How to program
C++ How to programC++ How to program
C++ How to program
 
Pointers and Structures
Pointers and StructuresPointers and Structures
Pointers and Structures
 
Constructors and Destructor in C++
Constructors and Destructor in C++Constructors and Destructor in C++
Constructors and Destructor in C++
 
Wrapper class
Wrapper classWrapper class
Wrapper class
 
358 33 powerpoint-slides_7-structures_chapter-7
358 33 powerpoint-slides_7-structures_chapter-7358 33 powerpoint-slides_7-structures_chapter-7
358 33 powerpoint-slides_7-structures_chapter-7
 
Templates in C++
Templates in C++Templates in C++
Templates in C++
 
OOP in C++
OOP in C++OOP in C++
OOP in C++
 
Arrays in java
Arrays in javaArrays in java
Arrays in java
 
Python strings presentation
Python strings presentationPython strings presentation
Python strings presentation
 

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
 
Stl Containers
Stl ContainersStl Containers
Stl Containers
 
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
 

Recently uploaded

Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackVICTOR MAESTRE RAMIREZ
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataBradBedford3
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...OnePlan Solutions
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideChristina Lin
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...gurkirankumar98700
 
Test Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and BackendTest Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and BackendArshad QA
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)OPEN KNOWLEDGE GmbH
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...soniya singh
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number SystemsJheuzeDellosa
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationkaushalgiri8080
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 

Recently uploaded (20)

Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStack
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
 
Test Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and BackendTest Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and Backend
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number Systems
 
Exploring iOS App Development: Simplifying the Process
Exploring iOS App Development: Simplifying the ProcessExploring iOS App Development: Simplifying the Process
Exploring iOS App Development: Simplifying the Process
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanation
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
 

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/