AnyCompiler

Lambdas e Algorithms

<algorithm> fornece operações prontas como std::sort que funcionam sobre o par de iterators begin()/end() de qualquer container, em vez de você escrever um loop de ordenação à mão.

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    vector<int> numbers = {5, 2, 8, 1, 9};
    sort(numbers.begin(), numbers.end());

    for (int n : numbers) {
        cout << n << " ";
    }
    cout << endl;
    return 0;
}
Output
1 2 5 8 9 

Expressões lambda

Uma lambda, escrita [capture](params) { body }, é uma function anônima inline — a lista [capture] diz quais variáveis do ambiente ela pode ver. Combinada com um algorithm como std::find_if, uma lambda permite expressar uma condição personalizada sem escrever uma function nomeada separada só para aquele único uso.

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    vector<int> numbers = {1, 2, 3, 4, 5};
    int threshold = 3;

    auto it = find_if(numbers.begin(), numbers.end(), [threshold](int n) {
        return n > threshold;
    });

    if (it != numbers.end()) {
        cout << "First number greater than " << threshold << " is " << *it << endl;
    }
    return 0;
}
Output
First number greater than 3 is 4

A seguir: smart pointers — a alternativa moderna, baseada em RAII, a new e delete manuais.

Practice exercise

Dado vector<int> numbers = {1, 2, 3, 4}, construa um novo vector contendo cada número elevado ao quadrado, depois imprima todos eles separados por espaços.