In C++, the Standard Template Library (STL) provides a rich set of algorithms that can be utilized to perform operations like sorting, searching, and manipulating elements of containers (like arrays, vectors, etc.).
These algorithms can be accessed using the <algorithm> header.
#include <algorithm>
Commonly Used Algorithms
The <algorithm> library in C++ offers many useful functions. Some of the most commonly used functions are given below.
| Functions | Description | 
|---|---|
sort() | 
Sort the elements of the container. | 
copy() | 
Copy elements within a given range. | 
move() | 
Move the given range of elements. | 
swap() | 
Exchange values of two objects. | 
merge() | 
Merge sorted ranges. | 
replace() | 
Replace the value of an element. | 
remove() | 
Remove an element. | 
Note: We will be using vectors to understand the working of all these functions. However, these functions work on other STL containers as well.
Example 1: Sort a Vector in Ascending Order
To sort a vector in ascending order, we can use the sort() function. Its syntax is:
sort( first, last);
Here,
- first - iterator specifying the beginning of the sorting range (inclusive)
 - last - iterator specifying the end of the sorting range (exclusive)
 
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int main() {
    vector<int> vec = {4, 2, 3, 1, 5};
    //sort the elements of the vector
    sort(vec.begin(), vec.end());
    for(int num : vec) {
        cout << num << " ";
    }
    return 0;
}
Output
1 2 3 4 5
Here, we have set the sort() range from the beginning of our vector using vec.begin() to the end of the vector using vec.end().
This sorts our vector in ascending order.
Example 2: Copy Vector Elements
We use the copy() function to copy a given range of elements from one vector to another. Its syntax is:
copy(first, last, result);
Here,
- first - iterator specifying the beginning of the range to copy (inclusive)
 - last - iterator specifying the end of the range to copy (exclusive)
 - result - iterator specifying the position in the destination vector where the elements will be copied
 
For example,
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int main() {
    vector<int> source = {1, 2, 3, 4, 5};
    // create destination vector of size 5
    vector<int> destination(5);
    
    // copy the contents of source to destination
    copy(source.begin(), source.end(), destination.begin());
    // print elements of destination vector
    for(int num : destination) {
        cout << num << " ";
    }
    return 0;
}
Output
1 2 3 4 5
Here, we have created the source with five elements and an empty vector destination of size 5.
We then used the copy() function to copy the contents of source to destination.
Example 3: Move Vector Elements
We can use the move() function to move elements from one vector to another. Its syntax is:
move(first, last, result);
For example,
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int main() {
    vector<string> source = {"apple", "banana", "cherry"};
    vector<string> destination(3);
    cout << "Before move:" << endl;
    cout << "source: ";
    for(const string& str : source) {
        cout << str << " ";
    }
    cout << endl;
    cout << "destination: ";
    for(const string& str : destination) {
        cout << str << " ";
    }
    cout << endl;
    // perform the move operation
    move(source.begin(), source.end(), destination.begin());
    cout << "After move:" << endl;
    cout << "source: ";
    for(const string& str : source) {
        cout << str << " ";
    }
    cout << endl;
    cout << "destination: ";
    for(const string& str : destination) {
        cout << str << " ";
    }
    cout << endl;
    return 0;
}
Output
Before move: source: apple banana cherry destination: After move: source: destination: apple banana cherry
Example 4: Swap the Contents of Two Vectors
We can swap the contents of two STL vectors using the swap() function. Its syntax is:
swap(x, y);
Here, x and y are containers whose contents need to be swapped.
For example,
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int main() {
    vector<int> vec1 = {1, 2, 3};
    vector<int> vec2 = {4, 5, 6};
    // print vec1 and vec2 before swap
    cout << "Before swap:" << endl;
    cout << "vec1: ";
    for(int num : vec1) {
        cout << num << " ";
    }
    cout << endl;
    cout << "vec2: ";
    for(int num : vec2) {
        cout << num << " ";
    }
    cout << endl;
    // swap vec1 and vec2
    swap(vec1, vec2);
    // print vec1 and vec2 after swap
    cout << "After swap:" << endl;
    cout << "vec1: ";
    for(int num : vec1) {
        cout << num << " ";
    }
    cout << endl;
    cout << "vec2: ";
    for(int num : vec2) {
        cout << num << " ";
    }
    cout << endl;
    return 0;
}
Output
Before swap: vec1: 1 2 3 vec2: 4 5 6 After swap: vec1: 4 5 6 vec2: 1 2 3
Example 5: Merge Two Vectors
We can merge two STL containers using the merge() function. It's syntax is:
merge(first1, last1, first2,  last2, result);
Here,
- first1, last1 - iterators specifying the first input range.
 - first2, last2 - iterators specifying the second input range.
 - result - iterator specifying the beginning of the destination range.
 
For example,
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int main() {
    vector<int> vec1 = {1, 3, 5};
    vector<int> vec2 = {2, 4, 6};
    vector<int> result(6);
    // vec1 and vec2 before merge
    cout << "Before merge:" << endl;
    cout << "vec1: ";
    for(int num : vec1) {
        cout << num << " ";
    }
    cout << endl;
    cout << "vec2: ";
    for(int num : vec2) {
        cout << num << " ";
    }
    cout << endl;
    // perform merge operation
    merge(vec1.begin(), vec1.end(), vec2.begin(), vec2.end(), result.begin());
    // output result after merge
    cout << "After merge:" << endl;
    cout << "result: ";
    for(int num : result) {
        cout << num << " ";
    }
    cout << endl;
    return 0;
}
Output
Before merge: vec1: 1 3 5 vec2: 2 4 6 After merge: result: 1 2 3 4 5 6
Notice that the merged vector is returned in sorted order.
Example 6: Replace Vector Element
We can replace all occurrences of an element in an STL container with another element using replace() function. It's syntax is:
replace(first, last, old_value, new_value);
Here,
- first, last - iterators specifying the range to transform.
 - old_value - value to be replaced.
 - new_value - replacement value.
 
For example,
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int main() {
    vector<int> vec = {4, 2, 3, 2, 5};
    // display the vector before replacement
    cout << "Before: ";
    for(int num : vec) {
        cout << num << " ";
    }
    cout << endl;
    // replace 2 with 99
    replace(vec.begin(), vec.end(), 2, 99);
    // display the vector after replacement
    cout << "After: ";
    for(int num : vec) {
        cout << num << " ";
    }
    cout << endl;
    return 0;
}
Output
Before: 4 2 3 2 5 After: 4 99 3 99 5
Here we have replaced all the occurrences of 2 with 99.
Example 7: Delete a Value From the Given Range
We can remove the first occurrence of a value from a given range using the remove() function. It's syntax is:
remove(first, last, val);
Here,
- first, last - iterators specifying the range to transform
 - val - value to be removed
 
For example,
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int main() {
    vector<int> vec = {4, 2, 3, 2, 5};
    // print the vector before deletion
    cout << "Before deletion: ";
    for(int num : vec) {
        cout << num << " ";
    }
    cout << endl;
    // remove the first occurrence of 2
    remove(vec.begin(), vec.end(), 2);
    // print the vector after deletion
    cout << "After deletion: ";
    for(int num : vec) {
        cout << num << " ";
    }
    cout << endl;
    return 0;
}
Output
Before deletion: 4 2 3 2 5 After deletion: 4 3 5 2 5