Questions: 1. Explain the terms container, iterators and algorithms. 2. What is mutating and non mutating algorithms ? 3. Explain major categories of containers supported by STL. 4. Explain the components of standard template library in detail.
Standard
Template Library
Introduction
to STL (Standard Template Library)
•
The Standard Template Library(STL) is collection of well structured generic C++
classes (Templates) and functions. ‒ Basically STL consists three basic
components 1. Container 2. Algorithms 3. Iterators
•
The standard template library is built using template and it is orthogonal in
design because components can be used in combination with one another. Let us
discuss these components in detail.

•
The container is a collection of objects of different types. These objects
store the data. The container can be implemented using template classes.
Various types of container are ‒

a) Sequence container ‒ It consists of all the
classes who represent the sequence or linear list. For example, vector class
defines dynamic array. Dequeue is for creating doubly ended queue i.e. we can
perform insertion and deletion of elements from both the ends of queue.and list
provides a linear list.
b) Associative
container ‒ It allows
efficient retrieval of values based on keys. For example in map one can
retrieve or store the data with the help of unique key. Other examples of
associative container are set, multiset, multimap.
c) Derived container ‒
The derived containers are created from the sequence containers. The derived
containers are stack, queue and priority queue. These are also known as container adaptors.
Each
container class defines a set of functions that may be applied to the
container.
•
For example, a list container includes functions that insert, delete and merge
elements. A stack includes functions that push and pop values.
•
Following is a simple example of container class for list container which
demonstrates sequence container.
#include <iostream>
#include <list> // list container
#include <numeric> // for accumulate
using namespace std;
// Using the list container
void print(list<double>&lst)
{
list<double>::iterator key; // traverse iterator
for (key = 1st.begin();
key != 1st.end(); ++key)
cout << *key
<< '\t';
cout << endl;
}
int main()
{
double array[4] = { 30, 20, 10, 40 };
list<double> obj;
for (int i = 0; i < 4; ++i)
//inserting elements in the list
obj.push_front(array[i]);
print(obj);
//sorting of the list
obj.sort();
cout<<"The sorted list is..."<<endl;
print(obj);
cout << "sum is "
<< accumulate(obj.begin(), obj.end(), 0.0)
<< endl;
return 0;
}
Output
40 10 20
30
The sorted list is...
10 20 30
40
sum is 100
•
In above program the list container is used. An array consists of 4 double
values. These double values will be pushed into the list container. The print function uses an iterator to print
each element of the list. The iterator acts like a pointer. The begin() and
end() are the member functions of the list container. The begin() represents
the starting and end represents the ending locations of the container. The
sort() function is useful for sorting the elements. This member function
basically represents the stable sorting algorithm. The numeric package is
included for supporting the accumulate() function. It uses 0.0 as the initial
value and then computing the sum of all the elements starting from the location
obj.begin() to obj.end(). Various member functions of container class are
enlisted in following table.
Member : Meaning
CAN::CAN()
‒ Can hold the item. It is a copy
constructor.
CAN::CAN(c)
‒ Copy constructor.
c.begin()
‒ For referring the beginning location.
c.end()
‒ Ending location of the list.
c.rbegin()
‒ Beginning by a reverse iterator.
c.rend()
‒ End used by reverse iterator.
c.size()
‒ Number of elements in CAN.
c.swap(d)
‒
Swaps two CANs.
c.empty()
‒ It is Boolean. If empty it's value is
true.
• The following program shows an associative
container ‒
#include <iostream>
#include <map>
#include <cstring>
using namespace std;
int main()
{
map<string, int,
less <string>> age; // map is associative container
age["Shivani"]
= 10;
age["Parth"]
= 05;
age["Prasad"]
= 25;
cout <<
"Parth is " << age["Parth"]<<" years
old." ;
return 0;
}
•
The iterators are basically objects but sometimes they can be pointers and
hence iterators specify the positions in container. The iterators are used to
traverse the contents of container. There are five types of iterators.
Iterator ‒ Description
Random
access: Elements can be stored or retrieved randomly.
Forward:
The elements can be stored or retrieved but only forward moving is allowed.
Input: Elements retrieving is allowed with forward
moving.
Output: Elements storing is allowed with forward
moving.
Bidirectional: Store and retrieve the elements and
forward/backward moving is allowed.
•
Levels of functionalities of different iterators is as shown below.

#include <iostream>
#include <set>
using namespace std;
int main()
{
int arr[4] = { 1,2, 3, 4}, *ptr = arr;
set<int, greater<int>> s;
set<int, greater<int>> :: const_ iterator it;
while (ptr != arr + 4)
s.insert(*ptr++);
cout << "The numbers below 5: " << endl;
for (it = s.begin(); it != s.end(); ++it)
cout << *it << '\t';// Using iterator 'it'
traversing array
cout << endl;
return 0;
}
Output
The numbers below 5:
4 3
2 1
•
The above given program is a simple example in which the iterator for the set
container is used. The iterator is given to be variable it which traverse
through the range from s.begin() to s.end(). The iterator is basically a
pointer which navigates the contents of the container.
•
The algorithms are used to process the contents of the containers. The
functionalities provided in container are not sufficient to perform complex
operations hence the algorithms are used to support more complex operations for
the containers. Using algorithms the reusability can be achieved in STL.
•
In order to access the STL algorithms we have to write <algorithm> in the
program.
•
Various categories of algorithm are ‒
1. Sorting algorithms ‒
These algorithms contain the functionalities related to sorting of the list.
2. Mutating sequence
algorithms ‒ These algorithms modify the contents of
the container. For example copy() operation will modify the contents of the container.
3. Nonmutating sequence
algorithms ‒ These algorithms do not modify the
contents of the container as they work. For instance count() will simply count
the occurrences in the container.
4. Numerical algorithms
‒
These algorithms are useful for performing some computations. For instance sum
of all the elements can be obtained by the function accumulate().
•
We will write a simple program for sorting the elements of an array using
sorting algorithm.
#include <iostream>
#include <algorithm>//keyword algorithm included
#define SIZE 10
using namespace std;
int main()
{
int n,item;
int array[SIZE], i;
cout<<"How Many Elements You Want to Enter";
cin>>n;
//setting the range for sorting
int Limit= array + n;
cout<<"Enter The Numbers":
for (i = 0; i < n; ++i)
{
cin >item;
array[i] = item;
}
//calling the function from algorithm
sort(array, Limit);
//displaying the sorted list of elements
cout<<"\n The sorted list is ..."<<endl;
for (i=0; i < n; ++i)
cout << array[i]
<< '\t';
cout << endl;
return 0;
}
Output
How Many Elements You
Want to Enter 7
Enter The Numbers
4
3
1
2
7
6
5
The sorted list is...
1 2
3 4 5
6 7
•
In above program the keyword <algorithm> is used and the sort is a
function that is supported by the sorting algorithm. By this function the quick
sort is performed over the range of the array from first element to the last
element of the array. Hence we set the range by a Limit variable(from 0th
position of array to N).
•
We will summarize various algorithms and supporting functionalities in
following tables ‒
Function
‒ Description
1.
sort() ‒ Using quick sort the elements
are sorted,
2.
stable_sort() ‒ Using stable sorting method the elements are
sorted.
3.
merge() ‒ This function is used for
merging the elements.
4.
sort_heap() ‒ Performs sorting on
already created heap.
5.
min() ‒ It finds the minimum element.
6.
max() ‒ It finds the maximum element.
7.
binary_search() ‒ It performs the binary search on the sorted elements to
search for particular element.
Function - Description
1.
copy() ‒ Copies the sequence of elements
2.
copy_backward(). ‒ Copies the sequence
of elements from end of the list, i.e. copies the list in backward direction.
3.
reverse() ‒ This function is used to reverse the given
sequence of elements.
4.
unique() ‒ It finds the adjacent duplicate elements and
removes them.
Function ‒
Description
1.
find() ‒ It will find the position of
desired element.
2.
count() ‒ This function counts the number of elements in the given sequence.
3.
equal() ‒ It checks whether the two sequences are equal or not. If two
sequences are matching then it returns true.
4.
search() ‒ This operation is used for searching the desired element from the
given sequence.
Function ‒ Description
1.
accumulate() ‒ Successive elements are
summerized and a sum of all the elements in a given sequence is obtained.
2.
inner_product() ‒ It performs the product operation on a pair
of sequences.
3.
partial_sum() ‒ It obtains the sequence
by summing the pair of sequences.
4.
adjacent_difference() ‒ It produces a
sequence from another sequence.
1. Explain the terms
container, iterators and algorithms.
2. What is mutating
and non mutating algorithms ?
3. Explain major
categories of containers supported by STL.
4. Explain the
components of standard template library in detail.
Data Structures using C PlusPlus: Chapter 8: Standard Template Library : Tag: Data Structure, C++ Programing : C++ Program - Introduction to STL (Standard Template Library)
Data Structures using CPlusPlus
CS25C05 2nd Semester ECE Dept | 2025 Regulation | 2nd Semester 2025 Regulation
English Essentials II
EN25C02 2nd Semester | 2025 Regulation | 2nd Semester 2025 Regulation
Tamils and Technology தமிழர்களும் தொழில்நுட்பமும்
UC25H02 2nd Semester | 2025 Regulation | 2nd Semester 2025 Regulation
Linear Algebra
MA25C02 2nd Semester | 2025 Regulation
Electron Devices
EC25C01 2nd Semester ECE Dept | 2025 Regulation | 2nd Semester 2025 Regulation
Data Structures using CPlusPlus
CS25C05 2nd Semester ECE Dept | 2025 Regulation | 2nd Semester 2025 Regulation
Circuits and Network Analysis
EC25C02 2nd Semester ECE Dept | 2025 Regulation | 2nd Semester 2025 Regulation
Re-Engineering for Innovation
ME25C05 2nd Semester | 2025 Regulation | 2nd Semester 2025 Regulation
Engineering Drawing - Laboratory
ME25C01 2nd Semester | 2025 Regulation | 2nd Semester 2025 Regulation
Data Structures using CPlusPlus - Laboratory
CS25C05 2nd Semester ECE Dept | 2025 Regulation | 2nd Semester 2025 Regulation
Devices and Circuits Laboratory
EC25C03 2nd Semester ECE Dept | 2025 Regulation | 2nd Semester 2025 Regulation