контекстные функции 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());
}
для векторов целых чисел это уже работает. Остальное добавляйте по необходимости (подозреваю, нужны шаблоны)