C++ ofrece distintos contenedores para almacenar elementos del mismo tipo de forma ordenada.
Existe std::array para contenedores de tamaño fijo y std::vector, que viene con capacidad de redimensionamiento dinámico.
Cuando declaras un array o un vector, necesitas especificar el tipo de elementos que ese contenedor va a guardar. Los arrays también necesitan un tamaño. Mira estos ejemplos para ver la inicialización de los dos tipos de contenedores:
#include <array>
#include <string>
// std::array<element_type, size> variable_name {list of elements}
std::array<std::string, 3> indie_rock {"yeah", "yeah", "yeah"};
// indie_rock contains the elements "yeah" three times
Los vectores suelen necesitar más espacio, ya que reservan memoria para seguir creciendo. No necesitas especificar un tamaño:
#include <vector>
// std::vector<element_type> variable_name {list of elements}
std::vector<int> countdown {3, 2, 1};
// my_vector contains the elements 3, 2 and 1
Nota: Todavía no necesitas conocer la mecánica exacta detrás del concepto de plantilla; tendrá su propio concepto más abajo en el árbol del temario.
Los vectores y los arrays comparten las mismas funciones para acceder a sus elementos.
Puedes usar las funciones miembro front y back para obtener el primer y el último elemento del contenedor.
También están at y el operador [] para acceder a elementos específicos.
countdown[0];
// => 3
countdown.at(2);
// => 1
countdown[1] = 4;
// countdown now contains 3, 4 and 1
indie_rock.back() = "yeahs";
// indie_rock is now "yeah", "yeah", "yeahs"
Nota: Si eliges una posición que no está dentro del rango de tu contenedor,
[]podría provocar un comportamiento indefinido. La funciónatlanzaría una excepción, lo que a la larga podría facilitarte la vida.
Como un vector no tiene un tamaño fijo, es posible agregar o quitar elementos.
Dos funciones comunes para eso son emplace_back y pop_back.
std::vector<std::string> witches {"Holly", "Alyssa", "Shannen"};
witches.pop_back();
// Shannen is no longer with the witches
witches.emplace_back("Rose");
// Rose has joined the team
Puedes comprobar si los contenedores están vacíos con la función miembro empty.
Si quieres saber la cantidad de elementos, puedes usar size.