Filas de tarefas em C++: guia para programadores iniciantes

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: por que precisamos de filas de tarefas em C++?

\n

Imagine que você está em uma fila no caixa do supermercado. O primeiro que chegou é atendido primeiro. Na programação, essa estrutura é chamada de fila (queue). É um dos tipos fundamentais de dados que funciona pelo princípio FIFO (First In, First Out) — "o primeiro a entrar é o primeiro a sair".

\n

Em C++, as filas de tarefas são usadas em toda parte: desde o processamento de requisições de rede até o gerenciamento de threads em aplicações multithread. Para um programador iniciante, entender filas é um passo para dominar tópicos mais complexos, como programação assíncrona e padrões de projeto.

\n

Neste artigo, vamos explorar como criar e usar filas em C++, analisar o contêiner padrão std::queue, escrever alguns exemplos práticos e discutir erros comuns de iniciantes.

\n\n

Fundamentos da fila: teoria e primeiro exemplo

\n

O que é uma fila?

\n

Uma fila é um tipo abstrato de dados que suporta duas operações principais:

\n
    \n
  • Adicionar um elemento ao final da fila (enqueue / push);
  • \n
  • Remover um elemento do início da fila (dequeue / pop).
  • \n
\n

Em C++, a fila padrão é implementada no arquivo de cabeçalho <queue> como a classe std::queue. Por padrão, ela usa std::deque como contêiner base, mas você pode substituí-lo por std::list.

\n\n

Primeiro exemplo: fila de números

\n

Vamos escrever um programa simples que cria uma fila de números inteiros, adiciona alguns valores e os exibe na tela.

\n
#include <iostream>\n#include <queue>\n\nint main() {\n    std::queue<int> my_queue;\n\n    // Adicionando elementos à fila\n    my_queue.push(10);\n    my_queue.push(20);\n    my_queue.push(30);\n\n    std::cout << "Primeiro elemento (front): " << my_queue.front() << std::endl;\n    std::cout << "Último elemento (back): " << my_queue.back() << std::endl;\n    std::cout << "Tamanho da fila: " << my_queue.size() << std::endl;\n\n    // Removendo elementos\n    while (!my_queue.empty()) {\n        std::cout << "Removido: " << my_queue.front() << std::endl;\n        my_queue.pop();\n    }\n\n    return 0;\n}
\n

Resultado da execução do programa:

\n
Primeiro elemento (front): 10\nÚltimo elemento (back): 30\nTamanho da fila: 3\nRemovido: 10\nRemovido: 20\nRemovido: 30
\n

Observe: front() retorna o primeiro elemento (que será removido em seguida), e back() retorna o último elemento adicionado. O método pop() remove o elemento, mas não o retorna — é importante lembrar disso!

\n\n

Métodos principais de std::queue

\n

Para trabalhar eficientemente com filas, é necessário conhecer todos os seus métodos. Aqui está a lista completa:

\n
    \n
  • push(const T& value) — adiciona um elemento ao final da fila;
  • \n
  • pop() — remove o primeiro elemento (não o retorna);
  • \n
  • front() — retorna uma referência ao primeiro elemento;
  • \n
  • back() — retorna uma referência ao último elemento;
  • \n
  • empty() — verifica se a fila está vazia (retorna true/false);
  • \n
  • size() — retorna o número de elementos.
  • \n
\n

Importante: Antes de chamar front() ou pop(), sempre verifique se a fila não está vazia usando empty(). Tentar acessar elementos de uma fila vazia resultará em comportamento indefinido (provavelmente, uma falha no programa).

\n\n

Exemplo prático: fila de tarefas

\n

Agora, vamos simular uma situação real. Suponha que temos um sistema que processa pedidos. Cada pedido é uma estrutura com um número e uma descrição. Colocamos os pedidos em uma fila

Blogs

Book Recommendations