C++ Tutorial Index

C++ Tutorial C++ History C++ Installation C++ First Program C++ cin and cout C++ Data type C++ Variable C++ operator C++ Keywords

C++ Control Statements

C++ If C++ Nested if C++ If-else C++ If-else-if C++ Switch C++ Break C++ Continue C++ Goto C++ For loop C++ While loop C++ Do while loop

C++ Functions

C++ Call by Value C++ Call by Reference C++ Recursion Function C++ Inline function C++ Friend function

C++ Arrays

Single dimension array Two dimension array

C++ Strings

C++ Strings

C++ Inheritance

C++ Inheritance Single level Inheritance Multilevel Inheritance Multiple Inheritance Hierarchical Inheritance Hybrid Inheritance

C++ Polymorphism

C++ Polymorphism C++ Overloading C++ Overriding C++ Virtual Function

C++ Pointers

C++ Pointers C++ this pointer

C++ Exception Handling

C++ Exception Handling

C++ Constructors

C++ Constructors Default Constructor Parameterize Constructor Copy constructor Constructor Overloading Destructor

C++ File Handling

C++ File Handling C++ Writing to file C++ Reading file C++ Close file

Miscellaneous

C Vs C++ C++ Comments C++ Data Abstraction C++ Identifier C++ Memory Management C++ Storage Classes C++ Void Pointer C++ Array To Function C++ Expressions C++ Features C++ Interfaces C++ Encapsulation std::min in C++ External merge sort in C++ Remove duplicates from sorted array in C++ Precision of floating point numbers Using these functions floor(), ceil(), trunc(), round() and setprecision() in C++ C++ References C++ Friend Functions C++ Mutable keyword Unary Operators in C++ Initialize Array of objects with parameterized constructors in C++ Differences between #define & const in C/C++ C++ Program to Implement Shell Sort C++ Program to Implement Merge Sort Storage Classes in C Vector resize() in C++ Passing by Reference Vs. Passing by the pointer in C++ Free vs delete() in C++ goto statement in C and C++ C++ program to read string using cin.getline() C++ String Concatenation Heap Sort in C++ Swap numbers in C++ Input Iterators in C++ Fibonacci Series in C++ C ++ Program: Alphabet Triangle and Number Triangle C++ Program: Matrix Multiplication C++ Program to Print Fibonacci Triangle Stack in C++ Maps in C++ Queue in C++ C++ Bitset C++ Algorithms Priority Queue in C++ C++ Multimap C++ Deque Function Pointer in C++ Sizeof() Operators in C++ C++ array of Pointers free() Vs delete in C Timsort Implementation Using C++ CPP Templates C++ Aggregation C++ Enumeration C++ Math Functions C++ Object Class C++ Queue Initialize Vector in C++ Vector in C++ C++ STL Components Function overloading in C++ C++ Maximum Index Problem C++ find missing in the second array C++ Program to find the product array puzzle C++ Program To Find Largest Subarray With 0 Sum C++ Program To Move All Zeros To The End Of The Array C++ Program to find the element that occurs once C++ Program to find the largest number formed from an array Constructor Vs Destructor C++ Namespaces C++ OOPs Concept C++ Static C++ Structs C++ Try-Catch C++ User Defined Exceptions C++ Virtual Destructor C++ vs C# Malloc() and new in C++ Palindrome Number Program in C++ Snake Code in C++ Splitting a string in C++ Structure Vs Class in C++ Virtual Function Vs Pure Virtual Function C++ Bidirectional Iterators C++ Forward Iterators C++ Iterators C++ Output Iterators C++ Range-based For Loop Converting string into integer in C++ LCM Program in C++ Type conversion in C++ Add two numbers using the function in C++ Advantage and disadvantage friend function C++ Armstrong Number Program in C++ ATM machine program in C++ using functions Binary to Decimal in C++ Bit Manipulation in C++ C++ Constructor C++ Dijkstra Algorithm Using the Priority Queue C++ int into String C++ Signal Handling Decimal to Binary in C++ Decimal to Hexadecimal in C++ Decimal to Octal in C++ Factorial Program in C++ Function in C++ Hexadecimal to Decimal in C++ Octal to Decimal in C++ Reverse a Number in C++ Structure Vs Class in C++ C++ Forward Iterators C++ Output Iterators C++ Prime number program Char Array to String in C++ Constructor Overloading in C++ Default arguments in C++ Different Ways to Compare Strings in C++ Dynamic Binding in C++ Program to convert infix to postfix expression in C++ SET Data Structure in C++ Upcasting and Downcasting in C++ Reverse an Array in C++ Fast Input and Output in C++ Delete Operator in C++ Copy elision in C++ C++ Date and Time C++ Bitwise XOR Operator Array of sets in C++ Binary Operator Overloading in C++ Binary Search in C++ Implementing the sets without C++ STL containers Scope Resolution Operator in C++ Smart pointers in C++ Types of polymorphism in C++ Exception Handling in C++ vs Java Const Keyword in C++ Type Casting in C++ Static keyword in C++ vs Java Inheritance in C++ vs Java How to concatenate two strings in C++ Programs to Print Pyramid Patterns in C++ swap() function in C++ Structure of C++ Program Stringstream in C++ and its applications rand() and srand() in C / C++ C++ Ternary Operator C++ Scope of Variables While Loop Examples in C++ Star pattern in C++ using For Loops For Loop Examples in C++ Do-While Loop Examples in C++ Top 5 IDEs for C++ That You Should Try Once Assertions in C/C++ C++ Convert Int to String Continue in C++ While loop Diamond Pattern in C++ using For Loop How to Reverse a String in C++ using Do-While Loop How to Reverse a String in C++ using For Loop How to Reverse a String in C++ using While Loop Infinite loop in C++ Loops in C++ Returning Multiple Values from a Function using Tuple and Pair in C++ wcscpy(), wcslen(), wcscmp() Functions in C++ Auto keyword in C++ C++ 11 vs C++ 14 vs C++ 17 C++ STL (Standard Template Library) Differences Between C Structures and C++ Structures Divide by Zero Exception in C++ Dynamic Constructor in C++ Dynamic Memory Allocation in C++ Find the Size of Array in C/C++ without using sizeof() function Floating Point Operations and Associativity in C, C++ and Java Hello World Program in C++ How to create a table in C++ How to Setup Environment for C++ Programming on Mac Implementation of a Falling Matrix in C++ Message Passing in C++ Pointer to Object in C++ Templates in C++ vs Generics in Java Ways to Copy a Vector in C++ What does Buffer Flush mean in C++ sort() function in C++ Structure Sorting (By Multiple Rules) in C++ Similarities between C++ and Java std::distance in C++ Array program in C++ C++ Tricks for Competitive Programming Desired Capabilities in Selenium Web Driver in C++ Socket Programming in C++ Template Specialization in C++ Classes and Objects in C++ Convex hull Algorithm in C++ DES in C++ C++ vardiac() function Difference between Two Sets in C++ Difference between Exit and Return Structured Binding in C++ Differences between Local and Global Variable Bitwise Operator vs Logical Operator Difference between OOP and POP in C++ Fork in C++ Functors in C++ How to call a void function in C++ How to create a directory or folder in C/C++ How to create a library in C++ How to create a stack in C++ How to create the Processes with Fork in C++ How to Handle Divide by Zero Exception in C++ Lambda Expression in C++ Pattern programs in C++ Roadmap to C++ Programming Substring in C++ Virtual base class in C++ Bits stdc++.h in C++ Top 14 Best Free C++ IDE (Editor & Compiler) for Windows in 2022 Bitmasking in C++ Auto Keyword in C++ Features of OOPS in C++ Hospital Management Project in C++ How to Declare Unordered Sets in C++ How to Sort an Array in C++ Include Guards in C++ Iostream in C++ Method overriding in C++ How to run program in turbo c++ How to Use Getline in C++ Leap Year Program in C++ Naming Convention in C++ New Operator in C++ Nullptr in C++ Object Slicing in C++ Principles of Object-Oriented Programming in C++ Processing strings using std string stream in C++ Pure Virtual Function in C++ With Example Program Random Number Generator in C++ Singleton Design Pattern in C++ Size_t Data Type in C++ Skyline Problem in C++ System() function in C++ Web Development in C++ Data Hiding in C++ Difference between exit() and _Exit() in C++ Hashing in C++ Object in C++ Sum of all Elements between k1’th and k2’th Smallest Elements Virtual class in C++ Vector Size in C++ Top best IDEs for C/C++ Developers in 2022 Tensorflow in C++ Sliding Window Technique in C++ Reverse String Word-Wise in C++ Returning a Function Pointer from a Function in C/C++ RTTI in C++ Pthreads or POSIX Threads in C++ Reserved Keywords in C++ Passing a Vector to a function in C++ 10 Best C and C++ Books for Beginners & Advanced Programmers Add two numbers represented by two arrays in C++ Array of Object in C++ C++ Program For FCFS Containership in C++ Counting Frequencies of Array Elements in C++ Decltype type Specifier in C++ Dynamic _Cast in C++ Difference between int main() and int main(void) in C/C++ Depth First Search Program to Traverse a Graph in C++ Features and Use Of Pointers in C/C++ Fread Function in C++ Programming Fscanf Function in The C++ Functions in C++ With Types and Examples Gmtime Function in C/C++ How is Multiset Implemented in C++ How to Build a Program in C++ How to Declare a 2d Array Dynamically in C++ inheritance Program in C++ int Max and int Min in C/C++ is It Fine to Write Void Main Or Main in C/C++ Lambda Expressions in C++ How to create a button in C++

C++ STL (Standard Template Library)

Introduction

C++ is a flexible type and general proposed programming language. So we need a standard library that supports C++. C++ STL (Standard Template Library) is a collection of templates that contains iterators, algorithms, and function objects.

In this article, we are going to learn about C++ STL (Standard Template Library).

Generic Programming

Generic programming is an approach that looks into designing and implementing data structure and algorithms in such a way that there is no loss of efficiency. It is also defined in another way that generic programming is a way of writing software that allows us to reuse the code without losing efficiency. For example: STL (Standard Template Library).

What is C++ STL (Standard Template Library)?

STL is abbreviated as Standard Template Library. It was invented by Alexander Stepanov in the year of 1994. The standard library contains an algorithm and data structure. With the help of STL (Standard Template Library), we can store and manipulate the object. By using STL (Standard Template Library), we can make a program robust and reusable.

Components of STL (Standard Template Library)

STL (Standard Template Library) has four components. These are as follows.

  1. Containers.
  2. Iterators.
  3. Algorithms.
  4. Function objects.

Let's discuss each component one by one.

1. Containers

If we have many elements then we need a container to sort those elements. With the help of a container, we can store the collection of data. It also helps us to implement and recreate complex data smoothly.

C++ STL (Standard Template Library)

The container is classified into three categories. These are as follows.

  • Sequence containers
  • Associative containers
  • Containers adapters

Sequence containers

  • It is used to store the sequential data structure like an array and linked list etc.
  • Vectors: It can be defined as a dynamic array with some extra features.

Syntax:  

vector<int> v;
  • Deque: it is also known as a double-ended queue. It allows us to insert and delete from both ends. It is more efficient than the vector.

Syntax:

deque<int> d;
  • List: it is also called the sequential container. It also allows non-contiguous allocation. With the help of a list, we can perform deletion and insertion anywhere in the sequence.

Syntax:

list<int> l;

Associative containers

  • It is used to store the element in which each element is related to a particular key. It is also used to store the sorted data structure like maps, sets and multi-sets etc.
  • Set: It is used to store the unique element.

Syntax:

set<int> s;
  • Multiset: It is similar to a set container. But it only stores non-unique elements.

Syntax:

multiset<int> m;
  • Map: It is used to store the set of key-value pairs in which each key is associated with one value.

Syntax:

map<int,int> mm;

Where int is key type and value type.

  • Multimap: It is used to store the set of key-value pairs in which each key is associated with a duplicate value.

Syntax:

multimap<int,int> mm1;

Containers adapters

  • It is used to define the container as an interface where it provides functionality to pre-existing containers.
  • Stack: It follows the last-in, first-out (LIFO) approach. It means new elements are added at the last and removed from that end.
  • Queue: It follows the first-in, first-out (FIFO) approach. It means new elements are added from the end and removed from the front.

Example of container

#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v;
for(int i=1; i<=21; i++)
{
v.push_back(i);
}
cout <<"Size : "<< v.size();
v.resize(12);
cout <<"\nAfter resizing it becomes : "<< v.size();
if (v.empty() == false)
{
cout <<"\nNot empty";
}
else{
cout <<"\nVector is empty";
}
cout <<"\n Elements of vector: ";
for (auto it = v.begin(); it != v.end(); it++)
{
cout << *it <<"";
}
return 0;
}

Output:

Size: 21
After resizing, it becomes: 12
Not empty
Elements of vector: 1 2 3 4 5 6 7 8 9 10 11 12

In the above example, the vector function and some other functions combinedly perform the operation. When the vector v is declared, we add the push_back() function to help the loop. After that, with the help of the size() function, we display the length of the vector. Now with the help of resize() function, we set the vector size to 12. Then we check if the vector is empty or not with the help of the empty() function. Now we display all the vector elements with the help of a loop and functions like begin() and end().

2. Iterators

With the help of iterators, we can access the element that is present inside the container. It helps us to traverse the element in the container. Iterators can be incremented and decremented. There are two types of iterator functions. These are as follows.

  • Begin(): With the help of these, we can iterate the first element of the container.
  • End(): With the use of these, we can repeat the last element of the container.

Iterators have been categorised into five types. These are as follows.

(a) Input iterator

  • It is a type of iterator by which we can read the value from the container.
  • It is a one-way iterator.
  • It can be incremented, but it cannot be decremented.

(b) Output iterator

  • With the help of the output iterator, we can modify the data inside the container, but we cannot read it.
  • It is also a one-way iterator.
  • Writing of data is only possible with the help of the Output iterator.

(c) Forward iterator

  • In Forward iterator, we can navigate through the container with the help of the ++ operator.
  • It can pass through each element in the container one element at a time.

(d) Bidirectional iterator

  • It is similar to the forward iterator. It also moves in a backward direction.
  • So it is a two-way iterator.
  • It can be both incremented and decremented.

(e) Random Access Iterator

  • It is used to access the random element in the container.
  • It supports all the features of the bidirectional iterator. 
  • It also supports pointer addition.
  • With the help of pointer addition, we can access the random element in the container.

Example of iterators

#include <iostream>
#include <iterator>
#include <vector>
using namespace std;
int main()
{
 vector<int> ar = { 7, 8 , 9, 10 , 11};
 vector<int>::iterator ptr;
 cout <<"The vector elements are : ";
 for (ptr = ar.begin(); ptr < ar.end(); ptr++)
 {
 cout << *ptr <<"";
 }
 return 0;
}

Output:

The vector elements are: 7 8 9 10 11 

3. Algorithm

There are different types of algorithms that can be implemented with the help of an iterator. It is defined as a function that can be applied to the container and provide the operations to the container. For example: sort(), swap(), min(), max() etc.

The algorithm has been categorised into five types. These are as follows.

  • Nonmutating algorithms.
  • Mutating algorithms.
  • Sorting algorithms.
  • Set algorithms.
  • Relational algorithms.

(a) Nonmutating algorithms

  • It is a type of algorithm in which we cannot alter the value of the container.
  • It also cannot change the order of the element.
  • This algorithm utilised the use of forwarding iterators.

(b) Mutating algorithms

  • It is a type of algorithm in which we can alter the value of the container.
  • It also can change the order of the element.

(c) Sorting algorithms

  • With the help of a sorting algorithm, we can modify the element inside the container.

(d) Set algorithms

  • It is also known as a sorted range algorithm.
  • With the help of this algorithm, we can perform some functions on the element inside the container.

(e) Relational algorithms

  • With the help of this algorithm, we can work on numerical data. 
  • It is mainly designed for mathematical calculation.

4. Function object

It is also known as a functor. It is a function that defines the object. It is used to extend the characteristics of regular function. It has both member function and member attributes. It can also be initialised before usage.

Example of function object

#include <iostream>
using namespace std;


class Add {


public:
int operator() (int p, int q) {
return p + q;
}
};


int main() {
Add add
int sum = add(555, 666);


cout <<"The sum of 555+666 is "<< sum;


return 0;
}

Output:

The sum of 555+666 is 1221