In addition to views, the ranges library offers actions. Actions allow eager, mutable operations. For example, to sort the values in the same vector, we can use the following syntax:
TEST_CASE("Sort numbers"){
vector<int> numbers{1, 12, 5, 20, 2, 10, 17, 25, 4};
vector<int> expected{1, 2, 4, 5, 10, 12, 17, 20, 25};
numbers |= ranges::action::sort;
CHECK_EQ(expected, numbers);
}
The |= operator is similar to the ranges::action::sort(numbers) call, sorting the vector in place. Actions are also composable, either through a direct method call or with the | operator. This allows allows us to write code that sorts and keeps the unique items from a container through composition of the sort and unique actions with the | operator:
TEST_CASE("Sort numbers and pick unique"){
vector<int> numbers{1, 1, 12, 5,...