stl — C ++ унарная функция для логической истины

Я пытаюсь использовать функцию any_of для вектора bool. Функция any_of требует унарной функции предиката, которая возвращает значение bool. Однако я не могу понять, что использовать, когда значение, введенное в функцию, уже является тем булом, который мне нужен. Я бы догадался, какое-нибудь имя функции, например «logic_true» или «istrue» или «if», но ни одна из них, похоже, не работает. Я вставил код ниже, чтобы показать, что я пытаюсь сделать. Заранее спасибо за любые идеи.
—Крис

// Example use of any_of function.

#include <algorithm>
#include <functional>
#include <iostream>
#include <vector>

using namespace std;

int main(int argc, char *argv[]) {
vector<bool>testVec(2);

testVec[0] = true;
testVec[1] = false;

bool anyValid;

anyValid = std::find(testVec.begin(), testVec.end(), true) != testVec.end(); // Without C++0x
// anyValid = !std::all_of(testVec.begin(), testVec.end(), std::logical_not<bool>()); // Workaround uses logical_not
// anyValid = std::any_of(testVec.begin(), testVec.end(), std::logical_true<bool>()); // No such thing as logical_true

cout << "anyValid = " << anyValid <<endl;

return 0;
}

4

Решение

Вы можете использовать лямбду (начиная с C ++ 11):

bool anyValid = std::any_of(
testVec.begin(),
testVec.end(),
[](bool x) { return x; }
);

А также ВотЖивой пример.

Вы также можете использовать функтор:

struct logical_true {
bool operator()(bool x) { return x; }
};

// ...

bool anyValid = std::any_of(testVec.begin(), testVec.end(), logical_true());

А также Вотживой пример для этой версии.

4

Другие решения

Похоже, вы хотите что-то вроде функции тождества (функция, которая возвращает любое значение, которое ей передано). Этот вопрос, кажется, предполагает, что такого не существует в std:::

Функция по умолчанию, которая просто возвращает переданное значение?

В этом случае проще всего написать

bool id_bool(bool b) { return b; }

и просто используйте это.

2

По вопросам рекламы [email protected]