modernize-use-ranges¶
Detects calls to standard library iterator algorithms that could be replaced with a ranges version instead.
Example¶
auto Iter1 = std::find(Items.begin(), Items.end(), 0);
auto AreSame = std::equal(Items1.cbegin(), Items1.cend(),
std::begin(Items2), std::end(Items2));
Transforms to:
auto Iter1 = std::ranges::find(Items, 0);
auto AreSame = std::ranges::equal(Items1, Items2);
Supported algorithms¶
Calls to the following std library algorithms are checked:
std::adjacent_find
,
std::all_of
,
std::any_of
,
std::binary_search
,
std::copy_backward
,
std::copy_if
,
std::copy
,
std::destroy
,
std::equal_range
,
std::equal
,
std::fill
,
std::find_end
,
std::find_if_not
,
std::find_if
,
std::find
,
std::for_each
,
std::generate
,
std::includes
,
std::inplace_merge
,
std::iota
,
std::is_heap_until
,
std::is_heap
,
std::is_partitioned
,
std::is_permutation
,
std::is_sorted_until
,
std::is_sorted
,
std::lexicographical_compare
,
std::lower_bound
,
std::make_heap
,
std::max_element
,
std::merge
,
std::min_element
,
std::minmax_element
,
std::mismatch
,
std::move_backward
,
std::move
,
std::next_permutation
,
std::none_of
,
std::partial_sort_copy
,
std::partition_copy
,
std::partition_point
,
std::partition
,
std::pop_heap
,
std::prev_permutation
,
std::push_heap
,
std::remove_copy_if
,
std::remove_copy
,
std::remove
, std::remove_if
,
std::replace_if
,
std::replace
,
std::reverse_copy
,
std::reverse
,
std::rotate
,
std::rotate_copy
,
std::sample
,
std::search
,
std::set_difference
,
std::set_intersection
,
std::set_symmetric_difference
,
std::set_union
,
std::shift_left
,
std::shift_right
,
std::sort_heap
,
std::sort
,
std::stable_partition
,
std::stable_sort
,
std::transform
,
std::uninitialized_copy
,
std::uninitialized_default_construct
,
std::uninitialized_fill
,
std::uninitialized_move
,
std::uninitialized_value_construct
,
std::unique_copy
,
std::unique
,
std::upper_bound
.
Reverse Iteration¶
If calls are made using reverse iterators on containers, The code will be
fixed using the std::views::reverse
adaptor.
auto AreSame = std::equal(Items1.rbegin(), Items1.rend(),
std::crbegin(Items2), std::crend(Items2));
Transforms to:
auto AreSame = std::ranges::equal(std::ranges::reverse_view(Items1),
std::ranges::reverse_view(Items2));
Options¶
- IncludeStyle¶
A string specifying which include-style is used, llvm or google. Default is llvm.
- UseReversePipe¶
When true (default false), fixes which involve reverse ranges will use the pipe adaptor syntax instead of the function syntax.
std::find(Items.rbegin(), Items.rend(), 0);
Transforms to:
std::ranges::find(Items | std::views::reverse, 0);