Pular para conteúdo

C++ Standard Template Library (STL)

Aula Relacionada recomendada



Cŕeditos: Canal Maratona UFMG.

Conhecendo a STL

A Standard Template Library (STL) do C++ é um conjunto de classes e funções baseadas em templates que implementam estruturas de dados e algoritmos amplamente utilizados, como listas, pilhas, vetores, ordenação, busca, entre outros.

Nesta seção, vamos conhecer as principais estruturas e algoritmos da STL que são usados na programação competitiva.

As estruturas de dados mais comuns são:

Estrutura Descrição
vector Armazena elementos como um array, mas pode alterar seu tamanho dinamicamente. A adição e remoção de elementos geralmente ocorrem no final, e os elementos podem ser acessados por índice.
set Armazena elementos únicos de forma ordenada (crescente). Elementos não podem ser acessados por índice.
map Armazena elementos em pares "chave/valor". Pode ser acessado através das chaves, e não pelo índice.
pair Armazena dois valores como um único elemento, onde cada valor pode ter um tipo diferente. O acesso aos valores é feito por meio de first e second.
stack Armazena elementos em uma ordem específica, chamada LIFO (Last In, First Out), onde os elementos podem ser adicionados e removidos apenas do topo (como uma pilha). Não é acessível por índice.
queue Armazena elementos em uma ordem específica, chamada FIFO (First In, First Out), onde os elementos são adicionados no final e removidos da frente (como uma fila). Não é acessível por índice.
priority_queue Armazena elementos em uma ordem específica, os elementos de maior prioridade aparecem primeiro (por padrão, os elementos de maior valor), é parecido com a queue, pois você só pode acessar os elementos da frente, mas aqui a ordem é determinada não pela ordem de inserção. Não é acessível por índice.
deque Armazena elementos em uma fila de duas extremidades (deque), onde os elementos podem ser adicionados e removidos de ambos os lados. Os elementos podem ser acessados por índice.

Os algoritmos mais comuns são:

Algoritmo Descrição
sort Ordena os elementos em uma estrutura de dados.
reverse Inverte a ordem dos elementos em um determinado intervalo.
swap Troca os valores de duas variáveis.

Template básico para a prática desta seção

Para facilitar nossa prática nessa seção utilizaremos esse template simples para praticar as estruturas:

template.cpp
1
2
3
4
5
6
7
#include <bits/stdc++.h>
using namespace std;

int main() {

  return 0;
}

#include <bits/stdc++.h>

É um arquivo de cabeçalho que já inclui todas as bibliotecas padrão, ou seja, você não precisa dar #include manualmente para cada estrutura de dados ou algoritmo que for usar. Por exemplo, se precisar de vector e set, normalmente teria que incluir #include <vector> e #include <set> separadamente. Com #include <bits/stdc++.h>, tudo isso já vem junto, facilitando o uso e economizando tempo.

using namespace std;

O using namespace std; é uma diretiva no C++ que permite que você use os elementos da biblioteca padrão (std) sem precisar escrever std:: antes de cada um deles. Isso facilita a escrita do código, pois você não precisa digitar std:: repetidamente para acessar coisas como cout, cin, vector, entre outros.

Por exemplo, se você não usar o using namespace std;, seria necessário escrever std::cout, std::cin, std::vector, etc. Com o using namespace std;, basta escrever cout, cin, vector, e o compilador entenderá automaticamente que você está se referindo à versão padrão dessas funções e estruturas.

Estruturas de Dados

Em cada um dos links abaixo, você encontra referências que ensinam a utilizar cada uma das estruturas.

Algoritmos

Em cada um dos links abaixo, você encontra referências que ensinam a utilizar cada um dos algoritmos.

https://www.geeksforgeeks.org/swap-in-cpp/

Pro Tip

Conhecer as estruturas e algoritmos básicos da STL vão te ajudar bastante na sua jornada em programação competitiva.

Lista de Exercícios