DMarlon Studio

Lección 10 · 10 de 20

Vectores · C++

Guarde listas en C++ con std::vector: crear, leer con [] y at(), saber su tamaño con size() y añadir elementos con push_back.

C++ · Vectores en DMarlon Studio: el código del ejemplo y su salida en la terminal

`std::vector` es la lista de C++: guarda elementos del mismo tipo, sabe cuántos tiene y puede crecer. El tipo va entre < >: std::vector<std::string> para los jugadores y std::vector<int> para sus puntos. Necesita #include <vector>.

`size()` da el número de elementos, `[]` lee o cambia uno por su posición, que empieza en 0, y `back()` devuelve el último. scores[1] = 110 cambia los puntos de Luis.

Para recorrer dos vectores a la vez se usa un for con índice. El índice es de tipo std::size_t, el entero sin signo que devuelve size(); con un int, algunos compiladores avisarían de que se comparan tipos distintos.

`push_back()` añade un elemento al final: Pablo y sus 130 puntos. Después, el for de rango suma todos los puntos, y static_cast<double> evita la división entera al calcular la media.

`at()` hace lo mismo que [], pero comprueba que la posición existe y, si no, lanza un error en lugar de leer memoria ajena. Por último, std::vector<int> lives(4, 3) crea un vector de 4 elementos que valen 3.

Código · main.cpp

#include <iostream>#include <string>#include <vector>int main() {    // A vector is a list that knows its size and can grow.    std::vector<std::string> players = {"Ana", "Luis", "Marta"};    std::vector<int> scores = {120, 95, 140};    std::cout << "Players: " << players.size() << '\n';    std::cout << "First: " << players[0] << ", last: " << players.back() << '\n';    scores[1] = 110;  // [] also changes an element; positions start at 0    // A for with an index, to use two vectors at the same time.    for (std::size_t i = 0; i < players.size(); i++)        std::cout << players[i] << ": " << scores[i] << " points\n";    // push_back adds an element at the end.    players.push_back("Pablo");    scores.push_back(130);    // A range-based for reads every value.    int total = 0;    for (int s : scores) total += s;    std::cout << "Total: " << total << ", average: " << total / static_cast<double>(scores.size()) << '\n';    // at() checks that the position exists; [] does not.    std::cout << "Fourth player: " << players.at(3) << '\n';    // A vector of 4 elements, all of them 3.    std::vector<int> lives(4, 3);    std::cout << "Lives of player 2: " << lives[1] << " (" << lives.size() << " players)\n";    return 0;}

Salida · c++ -std=c++17 main.cpp -o main && ./main

Players: 3
First: Ana, last: Marta
Ana: 120 points
Luis: 110 points
Marta: 140 points
Total: 500, average: 125
Fourth player: Pablo
Lives of player 2: 3 (4 players)

Para recordar

  • std::vector<tipo> es una lista que puede crecer.
  • v[i] lee o cambia el elemento i, contando desde 0.
  • size() da el número de elementos y back(), el último.
  • push_back(x) añade al final.
  • at(i) comprueba que la posición existe.

Ejercicio

Cree un vector con las temperaturas máximas de lunes a sábado, añada la del domingo con push_back y escriba la media de la semana y cuántos días se superaron los 25 grados.