// for por rango con copia, con referencia y con auto.
#include <iostream>
#include <string>
#include <vector>

int main() {
    std::vector<int> grades = {10, 15};

    // x es una copia de cada elemento.
    for (int x : grades) {
        x = x + 1;
        std::cout << x << " ";
    }
    std::cout << "/ " << grades[0] << " " << grades[1] << "\n";

    // x es otro nombre del elemento.
    for (int& x : grades) {
        x = x + 1;
    }
    std::cout << grades[0] << " " << grades[1] << "\n";

    std::vector<std::string> names = {"Ana", "Luis"};
    for (const std::string& name : names) {
        std::cout << name << " ";
    }
    std::cout << "\n";

    // auto deduce el tipo; sin & sigue siendo una copia.
    for (auto name : names) {
        name += "!";
    }
    std::cout << names[0] << "\n";
    for (auto& name : names) {
        name += "!";
    }
    std::cout << names[0] << "\n";

    auto size = names.size();
    const auto& first = names[0];
    std::cout << size << " " << first << "\n";
    return 0;
}
