C++ oferece diferentes contentores para armazenar elementos do mesmo tipo de forma ordenada. Existe o std::array para contentores de tamanho fixo e o std::vector, que vem com capacidades de redimensionamento dinâmico.
Quando declaras um array ou um vetor, precisas de especificar o tipo de elementos que esse contentor vai conter. Os arrays também precisam de um tamanho. Repara nestes exemplos para ver as inicializações dos dois tipos de contentor:
#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
Os vetores normalmente precisam de mais espaço, pois alocam memória para crescimento futuro. Não precisas de especificar um tamanho:
#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: Ainda não precisas de saber a mecânica exata por trás do conceito de template, ele terá o seu próprio conceito mais abaixo na árvore do programa.
Vetores e arrays partilham as mesmas funções para aceder aos seus elementos. Podes usar as funções membro front e back para obter o primeiro e o último elementos do contentor. Existe também at e o operador [] para aceder 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: Se escolheres uma posição que não está no intervalo do teu contentor, o
[]pode levar a comportamento indefinido. A funçãoatlançaria uma exceção, o que pode facilitar-te a vida a longo prazo.
Como um vector não tem tamanho fixo, é possível adicionar ou remover elementos. Duas funções comuns para esse propósito são emplace_back e 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
Podes verificar se os contentores estão vazios com a função membro empty. Se quiseres saber o número de elementos, podes usar size.