Доброго времени суток, дорогие форумчане! Всплыл вопрос: "Вот хочу сделать функцию и передавать ей как аргумент какое-то условие допустим i == j, функция обработки двумерного массива, и я не понимаю как мне это реализовать! И возможно ли как-то использовать для этого лямбда выражения?" Как работают последние я тоже не совсем понимаю. Все примеры что я видел используют уже имеющиеся, Стандартные функции, такие как sort() и другие. Как же сделать функцию которая сможет работать с лямбда выражениями?
Лямбды и иже с ними нужны там, где вы на ходу меняете поведение.
Например, функция
int accum(int * arr, int N, int init, std::function<int(int,int)> f)
{
for(int i = 0; i < N; ++i)
init = f(init,arr[i]);
return init;
}
Она просто применяет некую функциональность к значениям массива (как у вас). Если это i+j
- будет суммирование элементов. Если i*j
- их произведение. Вот тут вместо f
можно передавать ту же лямбду или функцию. Например, функция
int prod(int i, int j)
{
return i*j;
}
умножает числа - и вот произведение всех элементов:
cout << "Mul = " << accum(a,6,1,prod) << endl;
Или
struct square
{
int operator() (int i, int j) { return i + j*j; }
};
для суммирования квадратов:
cout << "Sq = " << accum(a,6,0,square()) << endl;
А вот и лямбда - для суммирования элементов:
cout << "Sum = " << accum(a,6,0,[](int i, int j) { return i+j; }) << endl;
Полный пример - тут.
В вашем случае можно использовать указатель на функцию. Пример:
void getSumMas(var** M, int N, bool (*condition)(int, int))
{
// здесь можно вызывать condition как обычную функцию
if (condition(......)) { /* что-то делаете */ }
}
Вызов:
bool compare(int i, int j)
{
return i == j // или что угодно другое
}
getSumMas(M, N, compare) // Имя функции является указателем на нее
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Нужно организовать проверку элементов двумерного массива по диагонали с рандомных координат, по аналогии с ходом коня в шахматахВот часть...
You need to find appmodulcpp to view the source for the current call stack frame
Буду очень признателен, если коллеги подскажут ссылку или исходник, где можно подсмотреть, как правильно добираться до значений вектора...