The following code example is taken from the book
C++20 - The Complete Guide
by Nicolai M. Josuttis,
Leanpub, 2021
The code is licensed under a
Creative Commons Attribution 4.0 International License.
// raw code
#include <vector>
#include <ranges>
#include <algorithm>
#include <numeric>
template<std::ranges::input_range T>
constexpr auto modifiedAvg(const T& rg)
{
using elemType = std::ranges::range_value_t<T>;
// initialize compile-time vector with passed elements:
std::vector<elemType> v{std::ranges::begin(rg),
std::ranges::end(rg)};
// perform several modifications:
v.push_back(elemType{});
std::ranges::sort(v);
auto newEnd = std::unique(v.begin(), v.end());
//...
// return average of modified vector:
auto sum = std::accumulate(v.begin(), newEnd,
elemType{});
return sum / static_cast<double>(v.size());
}