Apoyo básico / C++17

Funciones, referencias y lambdas

Llevar al apunte ↗

Descripción

Una función reúne instrucciones para una tarea y puede devolver un resultado. Sus parámetros son los datos que recibe. Usala para nombrar una operación repetida, separar una condición o conservar una implementación que después vas a adaptar.

Un parámetro por valor recibe una copia. Una referencia con & permite trabajar sobre el objeto original. const T& permite consultarlo sin copiarlo y conserva sus datos. Esta última forma es útil para vectores y strings grandes que una función solo necesita leer.

Una lambda es una función pequeña que podés escribir dentro de otra función o pasar a un algoritmo como sort o find_if. Los corchetes indican qué variables externas usa. Para las operaciones sencillas de estas fichas alcanza con capturar por valor las variables necesarias.

Funciones y operaciones

Forma Significado
long long sumar(long long a, long long b) Función que recibe dos enteros y devuelve uno
return resultado; Devuelve un valor y termina esa llamada
void modificar(vector<int>& v) Función que modifica el vector recibido
long long sumar(const vector<int>& v) Función que consulta el vector sin copiarlo
[](int x) { return x % 2 == 0; } Lambda que consulta si x es par
[limite](int x) { return x > limite; } Lambda que conserva una copia de la variable externa limite

Ejemplos

Definir una función fuera de main

long long sumar(long long a, long long b) {
    return a + b;
}

La llamada siguiente va dentro de main.

long long resultado = sumar(5, 8); // 13

Modificar el original

Esta función se define fuera de main.

void duplicar(vector<int>& valores) {
    for (int& x : valores) {
        x *= 2;
    }
}
vector<int> v = {2, 5};
duplicar(v); // v queda {4, 10}

Consultar sin copiar

Esta función se define fuera de main.

long long sumarValores(const vector<int>& valores) {
    long long total = 0;
    for (int x : valores) total += x;
    return total;
}
vector<int> v = {2, 5};
long long total = sumarValores(v); // 7

Usar una lambda con una variable externa

int limite = 5;
auto supera = [limite](int x) {
    return x > limite;
};
bool resultado = supera(7); // true

En un comparador de ordenación la función devuelve si el primer elemento debe ir antes que el segundo. En una búsqueda por condición devuelve si el elemento sirve.