ideas icon indicating copy to clipboard operation
ideas copied to clipboard

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

Open blacktea opened this issue 2 years ago • 3 comments

Добавить перегрузки к методам 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);

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

  • https://en.cppreference.com/w/cpp/algorithm/all_any_none_of
  • https://en.cppreference.com/w/cpp/algorithm/find

blacktea avatar May 04 '23 13:05 blacktea

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

std::any_of(v.begin(), v.end(),equalTo(5));

sergii-rybin-tfs avatar May 04 '23 18:05 sergii-rybin-tfs

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

kelbon avatar Jun 19 '23 13:06 kelbon

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

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

sergii-rybin-tfs avatar Jun 19 '23 13:06 sergii-rybin-tfs