Pular para conteúdo

Aula 13 - STL ⚙️


O que é a STL?

  • Standard Template Library.
  • Conjunto de ferramentas prontas e altamente otimizadas.

Os 3 Pilares da STL

  1. Containers: Guardam os dados (vector, map, list).
  2. Algoritmos: Processam os dados (sort, find, count).
  3. Iteradores: Fazem a ponte entre ambos.

Containers Sequenciais

  • std::vector: Array dinâmico (O mais comum).
  • std::list: Lista duplamente ligada.
  • std::deque: Fila de duas extremidades.

Containers Associativos

  • std::map: Chave-Valor ordenado.
  • std::set: Conjunto de valores únicos e ordenados.
  • std::unordered_map: Tabela Hash (Muito rápido).

Por que usar std::vector?

  • Acesso rápido (O(1)).
  • Cache-friendly (dados contíguos).
  • Gerencia a memória sozinho.

Métodos Essenciais do Vector

  • push_back() / emplace_back()
  • size() / capacity()
  • at() (acesso com checagem de erro)

O container std::map

map<int, string> usuarios;
usuarios[1] = "Ricardo";
- Busca por chave em O(log n).


Iteradores: Aponte para o Sucesso

  • Agem como ponteiros genéricos.
  • v.begin(): Primeiro elemento.
  • v.end(): Depois do último elemento.

Percorrendo com Iteradores

for (auto it = v.begin(); it != v.end(); ++it) {
    cout << *it;
}

Algoritmos Genéricos (#include )

  • Funcionam com qualquer container da STL.
  • std::sort()
  • std::find()
  • std::count()

Lambda Functions e Algoritmos

  • Personalize buscas e ordenações na hora!
    sort(v.begin(), v.end(), [](int a, int b) {
        return a > b; // Ordem decrescente
    });
    

Templates: A Mágica por trás

  • Permitem escrever código que funciona com qualquer tipo.
    template <typename T>
    T maior(T a, T b) { return (a > b) ? a : b; }
    

Template de Classe

template <class T>
class Caixa { T item; };

Complexidade Algorítmica (Notação Big-O)

  • STL é desenhada para garantir limites de performance.

Stack (Pilha) e Queue (Fila)

  • Adaptadores de containers que restringem o acesso (LIFO / FIFO).

Performance: Reservando Memória

  • Reallocations são custosas. Use reserve() em vectors se souber o tamanho.

Modern C++: as funções std::all_of, std::any_of

  • Verificam condições em coleções inteiras em uma linha.

Namespaces

  • Quase tudo na STL está dentro do std::.
  • Evite using namespace std; em projetos grandes e headers.

STL vs Performance Crítica

  • Em 99% dos casos, a STL é mais rápida que sua própria implementação.

Benefícios da STL

  • Segurança.
  • Padronização (qualquer programador C++ entende).
  • Portabilidade.

Resumo da Aula

  • Comece sempre pelo std::vector.
  • Use std::map para cadastros.
  • Explore a bibioteca algorithm.

Fim da Aula 13

  • Próxima aula: Gerenciamento de Memória (Smart Pointers)!