Забыл унарный оператор отрицания

есть задача подсчитать количество не пустых smart указателей в векторе. Написан такой код:

(пусть vect будет с типом int)

template <typename T>
bool IsEmpty(std::shared_ptr<T>& ptr)
{
    retrun ptr == nullptr;
}

//...some func
auto fullItemCount = std::count_if(vect.begin(), vect.end(), IsEmpty<int>);

Понятно, что он сейчас считает кол-во пустых элементов. Как сделать так, чтобы код выглядел максимально красиво? Помню был унарный предикат??, который отрицал значение, которое передается ему. Не могу его вспомнить.

По идее точно должен быть какой то стандартный предикат вместо функции IsEmpty, но я его тоже не нашел.


Ответы (1 шт):

Автор решения: Harry

Так достаточно красиво?

cout << count_if(v.begin(), v.end(), [](auto p){ return p; });


cout << v.size() - count(v.begin(),v.end(), nullptr);
→ Ссылка