C++ Standard Template Library (STL)
Aula Relacionada recomendada
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:
#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.
vector
: https://www.geeksforgeeks.org/vector-in-cpp-stl/set
: https://www.geeksforgeeks.org/set-in-cpp-stl/map
: https://www.geeksforgeeks.org/cpp/map-associative-containers-the-c-standard-template-library-stl/pair
: https://www.geeksforgeeks.org/pair-in-cpp-stl/stack
: https://www.geeksforgeeks.org/stack-in-cpp-stl/queue
: https://www.geeksforgeeks.org/queue-cpp-stl/priority_queue
: https://www.geeksforgeeks.org/cpp/priority-queue-in-cpp-stl/deque
: https://www.geeksforgeeks.org/deque-cpp-stl/
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/
sort
: https://www.geeksforgeeks.org/sort-c-stl/reverse
: https://www.geeksforgeeks.org/stdreverse-in-c/swap
: 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.