C++ Coleções Básico
std::vector
std::vector é o contêiner sequencial mais usado em C++. Ele armazena elementos em memória contígua, permitindo acesso rápido por índice e iteração eficiente. Diferente de arrays brutos, o vector gerencia automaticamente a memória e pode crescer dinamicamente.
Para adicionar elementos, usamos push_back (copia ou move) ou emplace_back (constrói no local). O vector mantém dois números: size (quantidade de elementos) e capacity (espaço alocado). Quando size ultrapassa capacity, o vector realoca um bloco maior, copiando ou movendo os elementos.
O acesso pode ser feito com operator[] (sem verificação de limites) ou com at() (lança std::out_of_range se o índice for inválido). Para percorrer, usamos iteradores, loops baseados em intervalo (for (auto& x : vec)) ou índices.
Neste card, você verá como usar push_back e emplace_back, entender a diferença entre size e capacity, acessar elementos com segurança usando at, e iterar de diversas formas.
Pontos-chave
push_backcopia ou move um elemento para o final;emplace_backconstrói o elemento diretamente no final.size()retorna quantos elementos existem;capacity()retorna quantos cabem antes de realocar.at(i)verifica o índice e lançastd::out_of_range;operator[]não verifica.- A iteração pode ser feita com iteradores,
forbaseado em intervalo ou índices. - Adicionar elementos pode invalidar iteradores e referências se houver realocação.
#include <iostream>
#include <vector>
#include <string>
int main() {
std::vector<std::string> frutas;
// push_back copia a string
frutas.push_back("maçã");
// emplace_back constrói a string no local
frutas.emplace_back("banana");
// Adicionando mais elementos
frutas.push_back("laranja");
std::cout << "Tamanho: " << frutas.size() << '\n';
std::cout << "Capacidade: " << frutas.capacity() << '\n';
// Acesso com at()
try {
std::cout << "Primeira fruta: " << frutas.at(0) << '\n';
std::cout << "Fruta inválida: " << frutas.at(10) << '\n';
} catch (const std::out_of_range& e) {
std::cerr << "Erro: " << e.what() << '\n';
}
// Iteração com for baseado em intervalo
std::cout << "Frutas: ";
for (const auto& fruta : frutas) {
std::cout << fruta << ' ';
}
std::cout << '\n';
return 0;
}