Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdexcept>
- template <typename T>
- class Fila {
- private:
- T* arr;
- int capacidade;
- int frente;
- int traseira;
- int tamanhoAtual;
- public:
- // Construtor padrão
- Fila(int tamanho = 10) {
- arr = new T[tamanho];
- capacidade = tamanho;
- frente = 0;
- traseira = -1;
- tamanhoAtual = 0;
- }
- // Destrutor
- ~Fila() {
- delete[] arr;
- }
- // Adicionar um elemento à fila
- void enfileirar(T dado) {
- if (tamanhoAtual == capacidade) {
- throw std::overflow_error("Fila cheia");
- }
- traseira = (traseira + 1) % capacidade;
- arr[traseira] = dado;
- tamanhoAtual++;
- }
- // Adicionar um elemento à fila usando colocar
- template <typename... Args>
- void colocar(Args&&... args) {
- if (tamanhoAtual == capacidade) {
- throw std::overflow_error("Fila cheia");
- }
- traseira = (traseira + 1) % capacidade;
- new (&arr[traseira]) T(std::forward<Args>(args)...);
- tamanhoAtual++;
- }
- // Remover um elemento da fila
- void desenfileirar() {
- if (tamanhoAtual == 0) {
- throw std::underflow_error("Fila vazia");
- }
- frente = (frente + 1) % capacidade;
- tamanhoAtual--;
- }
- // Obter o elemento da frente da fila
- T obterFrente() const {
- if (tamanhoAtual == 0) {
- throw std::underflow_error("Fila vazia");
- }
- return arr[frente];
- }
- // Verificar se a fila está vazia
- bool estaVazia() const {
- return tamanhoAtual == 0;
- }
- // Verificar se a fila está cheia
- bool estaCheia() const {
- return tamanhoAtual == capacidade;
- }
- // Obter o tamanho atual da fila
- int tamanho() const {
- return tamanhoAtual;
- }
- // Imprimir os elementos da fila
- void imprimir() const {
- if (tamanhoAtual == 0) {
- std::cout << "Fila vazia" << std::endl;
- return;
- }
- int count = tamanhoAtual;
- int i = frente;
- while (count > 0) {
- std::cout << arr[i] << " ";
- i = (i + 1) % capacidade;
- count--;
- }
- std::cout << std::endl;
- }
- };
- int main() {
- Fila<int> fila(5);
- fila.enfileirar(10);
- fila.enfileirar(20);
- fila.enfileirar(30);
- fila.enfileirar(40);
- fila.enfileirar(50);
- std::cout << "Elementos da fila: ";
- fila.imprimir();
- fila.desenfileirar();
- fila.desenfileirar();
- std::cout << "Elementos da fila após desenfileirar: ";
- fila.imprimir();
- std::cout << "Elemento na frente da fila: " << fila.obterFrente() << std::endl;
- // Usando o método colocar
- fila.colocar(60);
- std::cout << "Elementos da fila após colocar: ";
- fila.imprimir();
- return 0;
- }
Add Comment
Please, Sign In to add comment