# The New Algorithms

This lesson gives an overview of the new algorithms that are a part of C++17.

The new algorithms are in the `std`

namespace. `std::for_each`

and `std::for_each_n`

require the header `<algorithm>`

, but the remaining 6 algorithms require the header `<numeric>`

.

Here is an overview of the new algorithms:

Algorithm |
Description |
---|---|

`std::for_each` |
Applies a unary to the range.callable |

`std::for_each_n` |
Applies a unary callable to the first n elements of the range. |

`std::exclusive_scan` |
Applies from the left a binary callable up to the ith (exclusive) element of the range. The left argument of the callable is the previous result. Stores intermediate results. |

`std::inclusive_scan` |
Applies from the left a binary callable up to the ith (inclusive) element of the range. The left argument of the callable is the previous result. Stores intermediate results. |

`std::transform_exclusive_scan` |
First applies a unary callable to the range and then applies `std::exclusive_scan` . |

`std::transform_inclusive_scan` |
First applies a unary callable to the range and then applies `std::inclusive_scan` . |

`std::reduce` |
Applies from the left a binary callable to the range. |

`std::transform_reduce` |
Applies first a unary callable to the range and then `std::reduce` . |

Admittedly, this description is not easy to digest; therefore, I will first present an exhaustive example and then write about the functional heritage of these functions. I will ignore the new `std::for_each`

algorithm. In contrast to the C++98 variant that returns a unary function, the additional C++17 variant returns nothing.

As far as I know, at the time this course is being written (June 2017) there is no standard-conforming implementation of the parallel STL available. Therefore, I used the HPX implementation to produce the output. The HPX (High-Performance ParalleX) is a framework that is a general-purpose C++ runtime system for parallel and distributed applications of any scale.

Get hands-on with 1000+ tech skills courses.