Da trilha de C++ Este conceito ainda não saiu como card do dia. ir para o card de hoje

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_back copia ou move um elemento para o final; emplace_back constró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ça std::out_of_range; operator[] não verifica.
  • A iteração pode ser feita com iteradores, for baseado em intervalo ou índices.
  • Adicionar elementos pode invalidar iteradores e referências se houver realocação.
vector_basico.cpp
#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;
}

Exercícios

  1. 1
    Fácil

    Adicionar números e mostrar tamanho

    Crie um std::vector<int> vazio, adicione os números 10, 20 e 30 usando push_back e imprima o tamanho e os elementos.

    Resolver
  2. 2
    Médio

    Capacidade e realocação

    Crie um std::vector<int> e adicione 10 números sequenciais (1 a 10). A cada inserção, imprima size e capacity. No final, imprima todos os elementos usando at().

    Resolver
  3. 3
    Desafio

    Fila de strings com emplace_back e iteração segura

    Crie um std::vector<std::string> que simula uma fila de atendimento. Adicione três nomes usando emplace_back. Depois, remova o primeiro nome (simulando atendimento) usando erase com iterador. Imprima a fila atual usando at() e iteração com iteradores. Trate possíveis exceções ao acessar índices inválidos.

    Resolver

Continue estudando