Skip to main content

STL in C++

In this guide, we will explore the Standard Template Library (STL) in C++, which is a powerful library that provides data structures and algorithms in an organized manner. STL helps in writing efficient and maintainable code by offering a wide range of functionalities.


1. Introduction to STL​

STL in C++ is divided into three main components:

  • Containers: Data structures to store objects.
  • Algorithms: Procedures to process the data stored in containers.
  • Iterators: Objects that point to elements in containers and allow navigation.

2. Containers​

Containers are used to store collections of data. They are categorized into three types:

2.1 Sequence Containers​

These containers store data in a linear sequence.

ContainerDescription
vectorDynamic array
dequeDouble-ended queue
listDoubly linked list

Example:​

#include <iostream>
#include <vector>
using namespace std;

int main() {
vector<int> numbers = {1, 2, 3, 4, 5};
for (int num : numbers) {
cout << num << " ";
}
return 0;
}

Output:​

1 2 3 4 5

2.2 Associative Containers​

These containers store data in key-value pairs, providing fast search and retrieval.

ContainerDescription
setCollection of unique elements
mapKey-value pairs
multisetAllows duplicate values
multimapAllows duplicate keys

Example:​

#include <iostream>
#include <map>
using namespace std;

int main() {
map<int, string> students;
students[1] = "Alice";
students[2] = "Bob";

for (auto& student : students) {
cout << student.first << ": " << student.second << endl;
}
return 0;
}

Output:​

1: Alice
2: Bob

2.3 Container Adaptors​

These are wrappers around sequence containers and provide restricted interfaces.

ContainerDescription
stackLIFO (Last In First Out)
queueFIFO (First In First Out)
priority_queueElements sorted by priority

Example (Stack):​

#include <iostream>
#include <stack>
using namespace std;

int main() {
stack<int> s;
s.push(10);
s.push(20);
s.push(30);

while (!s.empty()) {
cout << s.top() << " ";
s.pop();
}
return 0;
}

Output:​

30 20 10

3. Iterators​

Iterators are used to point to elements in containers. They provide a mechanism to traverse through elements.

Types of Iterators:​

  • Input Iterator: Reads values in a sequence.
  • Output Iterator: Writes values in a sequence.
  • Forward Iterator: Can move in one direction (forward).
  • Bidirectional Iterator: Can move both forward and backward.
  • Random Access Iterator: Provides direct access to any element.

Example:​

#include <iostream>
#include <vector>
using namespace std;

int main() {
vector<int> vec = {10, 20, 30, 40};
vector<int>::iterator it;

for (it = vec.begin(); it != vec.end(); ++it) {
cout << *it << " ";
}
return 0;
}

Output:​

10 20 30 40

4. Algorithms​

STL provides a rich set of algorithms to work with data stored in containers. These algorithms work with iterators.

4.1 sort()​

Sorts elements in a range.

Example:​

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
vector<int> vec = {4, 2, 5, 1, 3};
sort(vec.begin(), vec.end());

for (int num : vec) {
cout << num << " ";
}
return 0;
}

Output:​

1 2 3 4 5

4.2 find()​

Searches for a specific value in a range.

Example:​

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
vector<int> vec = {10, 20, 30, 40, 50};
auto it = find(vec.begin(), vec.end(), 30);

if (it != vec.end()) {
cout << "Element found: " << *it << endl;
} else {
cout << "Element not found" << endl;
}

return 0;
}

Output:​

Element found: 30

4.3 reverse()​

Reverses the order of elements in a range.

Example:​

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
vector<int> vec = {1, 2, 3, 4, 5};
reverse(vec.begin(), vec.end());

for (int num : vec) {
cout << num << " ";
}
return 0;
}

Output:​

5 4 3 2 1

5. FUNCTORS :​

Functors are objects that can be treated as though they are a function. Functors are most commonly used along with STL algorithms. It overloads the function-call operator () and allows us to use an object like a function.

Types of FUNCTORS :​

  • Arithmetic Functors
  • Relational Functors
  • Logical Functors
  • Bitwise Functors

5.1 Arithmetic Functors :​

  • plus – Returns the sum of two parameters.
  • minus – Returns the difference of two parameters.
  • multiplies – Returns the product of two parameters.
  • divides – Returns the result after dividing two parameters.
  • modulus – Returns the remainder after dividing two parameters.
  • negate – Returns the negated value of a parameter.

5.2 Relational Functors :​

  • equal_to – Returns true if the two parameters are equal.
  • not_equal_to – Returns true if the two parameters are not equal.
  • greater – Returns true if the first parameter is greater than the second.
  • greater_equal – Returns true if the first parameter is greater than or equal to the second.
  • less – Returns true if the first parameter is less than the second.
  • less_equal – Returns true if the first parameter is less than or equal to the second.

5.3 Logical Functors :​

  • logical_and – Returns the result of Logical AND operation of two parameters.
  • logical_or – Returns the result of Logical OR operation of two parameters.
  • logical_not – Returns the result of Logical NOT operation of the parameters.

5.4 Bitwise Functors :​

  • bit_and – Returns the result of Bitwise AND operation of two parameters.
  • bit_or – Returns the result of Bitwise OR operation of two parameters.
  • bit_xor – Returns the result of Bitwise XOR operation of two parameters.

6. Commonly Used STL Algorithms​

Here are some commonly used algorithms in STL:

  • count(): Counts occurrences of an element.
  • max_element(): Finds the largest element.
  • min_element(): Finds the smallest element.
  • accumulate(): Sums up all elements.
  • binary_search(): Searches for an element using binary search.

Conclusion​

The STL in C++ provides a wide range of containers, iterators, and algorithms that help make your code more efficient and easier to maintain. By mastering STL, you can write cleaner and faster code. Happy coding!