cpp-ru / ideas

Идеи по улучшению языка C++ для обсуждения
https://cpp-ru.github.io/proposals
Creative Commons Zero v1.0 Universal
89 stars 0 forks source link

Добавить вариант std::any_of, all_of, none_of со значением #561

Open blacktea opened 1 year ago

blacktea commented 1 year ago

Добавить перегрузки к методам std::any_of, all_of, none_of, которые примают значение в качестве референса. Метод std::find имеет такую перегрузку

template< class InputIt, class T >
constexpr InputIt find( InputIt first, InputIt last, const T& value );

cppreference

Ожидаемое сигнатура:

template< class InputIt, class T >
constexpr bool any_of( InputIt first, InputIt last, const T& value );

Мотивация Рассмотрим простой пример с использованием std::any_of. Предположим имеем массив чисел, и хотим узнать содержит ли массив какое-то конкретное число.

С std::find мы напишем

vector<int> v{1,2,3};
int target = 1;
const bool contains = std::find(v.begin(), v.end(), target) != v.end;

C std::any_of:

vector<int> v{1,2,3};
int target = 1;
const bool contains = std::any_of(v.begin(), v.end(), [target](int value){ return target == value; });

Мое предложение призвано упростить код. Будет выглядить след. образом.

vector<int> v{1,2,3};
int target = 1;
const bool contains = std::any_of(v.begin(), v.end(), value);

Полезные ссылки:

sergii-rybin-tfs commented 1 year ago

Хорошая идея, я себе понапридумывал функций equalTo, notEqualTo ... как раз, что бы решить эту проблему

std::any_of(v.begin(), v.end(),equalTo(5));
kelbon commented 1 year ago

Это называется contains

sergii-rybin-tfs commented 1 year ago

Это называется contains

Вместо перегрузки предлагаете алгоритм с другим именем ?