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¶
- Escolha contêineres para scheduler de prioridade, dicionário ordenado e buffer.
- Identifique iteradores invalidados após inserção com realocação.
- Substitua busca manual por algoritmo de ranges.