контекстные функции c++

Создать функцию F высшего порядка, принимающую функцию Н и начало, и конец массива / вектора pack. F вызывает Н для каждого элемента pack. Н возвращает бинарное значение z для каждого элемента pack. Функция F производит дизъюнкцию всех z.

как я понял бинарное значение это true и false. но не совсем понятно как это сделать.

  void F(std::function<void(int)>&H, std::vector<int>pack) {


}
std::function<void(int *pack)>H = [](std::vector<int>pack) {
    std::vector<bool> pack_bool;


    for (int i = 0; pack.size(); ++i) {
        if (pack[i] > 0) {
            pack_bool.push_back(true);
        } else {
            pack_bool.push_back(false);
        }
    }


    for (int j = 0; j < pack_bool.size(); ++j) {
        std::cout << pack_bool[j] << " ";
    }
};

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

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

где то так

#include <iostream>
#include <string>

#include <vector>
using namespace std;

bool H(int i) {
    return i % 2 == 0;
}

bool F(bool (*h)(int), std::vector<int>::iterator b, std::vector<int>::iterator e)
{
    bool r = false;
    for (auto it = b; it != e; it++) {
        r |= h(*it);
    }
    return r;
}

int main()
{
    std::vector<int> a{1,2,3,4,5};
    std::cout << F(H, a.begin(), a.end());
}

для векторов целых чисел это уже работает. Остальное добавляйте по необходимости (подозреваю, нужны шаблоны)

→ Ссылка