Trusted answers to developer questions

Educative Answers Team

Grokking Modern System Design Interview for Engineers & Managers

Ace your System Design Interview and take your career to the next level. Learn to handle the design of applications like Netflix, Quora, Facebook, Uber, and many more in a 45-min interview. Learn the RESHADED framework for architecting web-scale applications by determining requirements, constraints, and assumptions before diving into a step-by-step design process.

The **algorithm library** has several built-in functions that provide a variety of functionalities (e.g., sorting, searching, counting, modifying, and non-modifying sequence operations). All these functions are designed to be used on ranges of elements.

A

rangeis any sequence of objects that can be accessed through iterators or pointers, such as an array or instance of some of the STL containers.

Some of the most important functions of the library are described below:

`sort`

The `sort`

function sorts the elements in the range [first,last) into ascending order.
The elements are compared using the `<`

operator.
Equivalent elements are not guaranteed to keep their original, relative order.

The parameters of this function are:

- Iterators to the initial and final position of the sequence to be sorted.
- An optional binary function that accepts two elements in the range as arguments, and returns a value convertible to
`bool`

.

#include <algorithm> #include <vector> int main () { int myints[] = {43, 23, 65, 2, 5, 24, 49, 33}; vector<int> myvector (myints, myints+8); // using default comparison (operator <): sort (myvector.begin(), myvector.begin()+8); //(12 32 45 71 26 80 53 33) cout<<" Sorted vector: "; for (vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it) cout << ' ' << *it; cout << '\n'; }

`is_sorted`

The `is_sorted`

function returns `true`

if the range [first,last) is sorted into ascending order.
The parameters of this function are:

- Iterators to the initial and final position of the sequence to be sorted.
- An optional binary function that accepts two elements in the range as arguments, and returns a value convertible to
`bool`

.

`merge`

The `merge`

function combines the elements in the sorted ranges, [first1, last1) and [first2,last2), into a new range (beginning at *result*) that has all its elements sorted.

The parameters of this function are:

- Iterators to the initial and final positions of both the sequences that are to be merged.
- Output iterator to the initial position of the range where the result of the merge is to be stored.
- An optional binary function that accepts two elements in the range as arguments, and returns a value convertible to
`bool`

.

#include <algorithm> // std::merge, std::sort int main () { int first[] = {30, 53, 12, 82, 23}; int second[] = {50, 40, 30, 20, 10}; std::vector<int> v(10); std::sort (first,first+5); std::sort (second,second+5); std::merge (first,first+5,second,second+5,v.begin()); std::cout << "Merged vector is: "; for (std::vector<int>::iterator it=v.begin(); it!=v.end(); ++it) std::cout << ' ' << *it; std::cout << '\n'; return 0; }

`includes`

The function returns `true`

if the sorted range [first1,last1) contains all the elements in the sorted range [first2,last2).
The parameters of this function are:

- Iterators to the initial and final positions of the first sorted sequence.
- Iterators to the initial and final positions of the second sorted sequence.
- Output iterator to the initial position of the range where the result of the merge is to be stored.
- An optional binary function that accepts two elements in the range as arguments, and returns a value convertible to
`bool`

.

#include <iostream> // std::cout #include <algorithm> // std::includes, std::sort bool myfunction (int i, int j) { return i<j; } int main () { int container[] = {5,10,15,20,25,30,35,40,45,50}; int continent[] = {40,30,20,10}; std::sort (container,container+10); std::sort (continent,continent+4); // using myfunction as the comparator function: if ( std::includes(container,container+10,continent,continent+4, myfunction) ) std::cout << "The first sequence contains the second sequence\n"; return 0; }

`min_element`

Returns an iterator pointing to the element with the smallest value in the range [first, last). The parameters for this function are:

- Iterators to the initial and final positions of the sequence being compared.
- An optional binary function that accepts two elements in the range as arguments, and returns a value convertible to
`bool`

. The value returned indicates whether or not the element passed as the first argument is considered less than the second.

*It returns the iterator to the minimum element in the range.*

`max_element`

Returns an iterator pointing to the element with the largest value in the range [first, last). The parameters for this function are:

- Iterators to the initial and final positions of the sequence being compared.
- An optional binary function that accepts two elements in the range as arguments, and returns a value convertible to
`bool`

. The value returned indicates whether or not the element passed as the first argument is considered less than the second.

*It returns the iterator to the maximum element in the range.*

#include <iostream> #include <algorithm> int main () { int myints[] = {43, 23, 65, 2, 5, 24, 49, 33}; std::cout << "The smallest element is " << *std::min_element(myints,myints+8) << '\n'; std::cout << "The largest element is " << *std::max_element(myints,myints+8) << '\n'; return 0; }

The complete list of all the functions that are part of this library, and their usage, can be found on the official documentation page.

RELATED TAGS

c++

library

algorithm

Copyright ©2022 Educative, Inc. All rights reserved

Grokking Modern System Design Interview for Engineers & Managers

Ace your System Design Interview and take your career to the next level. Learn to handle the design of applications like Netflix, Quora, Facebook, Uber, and many more in a 45-min interview. Learn the RESHADED framework for architecting web-scale applications by determining requirements, constraints, and assumptions before diving into a step-by-step design process.

Keep Exploring

Related Courses