Pular para conteúdo

Biblioteca Padrão e Contêineres

A biblioteca padrão oferece contêineres, algoritmos, ranges, strings, streams, numéricos, tempo, memória e concorrência. Escolha pelo contrato.

Guia de contêineres

Necessidade Tipo típico Propriedade importante
Sequência dinâmica contígua std::vector<T> Acesso indexado e boa localidade
Sequência contígua fixa std::array<T, N> Tamanho integra o tipo
Operações nas extremidades std::deque<T> Não é uma alocação contígua única
Endereços estáveis e splicing std::list<T> Sem acesso aleatório; alocação por nó
Chaves únicas ordenadas std::set<Key> Operações logarítmicas
Pares ordenados std::map<Key, T> Percurso classificado
Chaves únicas por hash std::unordered_set<Key> Busca média constante sob premissas
Pares por hash std::unordered_map<Key, T> Rehash e colisões importam

std::vector é a sequência padrão salvo requisito contrário. Lista encadeada não fica mais rápida só porque inserir é constante após conhecer a posição.

Algoritmos e ranges

std::vector<int> values{5, 1, 4, 1, 3};
std::ranges::sort(values);
auto unique_end = std::ranges::unique(values).begin();
values.erase(unique_end, values.end());

Prefira algoritmos padrão: expressam intenção e têm complexidade e requisitos especificados. Eles não corrigem comparador inválido.

Iteradores e invalidação

Categorias expressam percurso. Mutações têm regras específicas: crescimento de vector pode realocar; rehash invalida iteradores; contêineres por nós diferem. Consulte a operação exata.

Strings e texto

std::string armazena char; não impõe Unicode nem entende grafemas. std::string_view não possui dados e pode ficar dangling. Texto internacional exige política explícita.

Contratos de complexidade

Complexidade é portável, mas constantes, allocators, cache, distribuição e implementação afetam medições. “Tempo médio constante” de hash não garante pior caso.

Exercícios

  1. Escolha contêineres para scheduler de prioridade, dicionário ordenado e buffer.
  2. Identifique iteradores invalidados após inserção com realocação.
  3. Substitua busca manual por algoritmo de ranges.