C ++

Como usar a fila C ++

Como usar a fila C ++

Introdução

Uma fila é uma coleção de itens, onde o primeiro item adicionado à lista deve ser o primeiro item a ser removido a seguir. Assim, à medida que os itens são adicionados à coleção, ela cresce em tamanho, i.e. está crescendo em comprimento. Sempre que qualquer item deve ser removido, ele deve ser o primeiro a ser adicionado. Se os itens forem removidos continuamente, o próximo item removido é o segundo; o terceiro é removido depois, e assim por diante.

Depois que o primeiro item da lista original foi removido, o segundo se torna o primeiro item. Após o segundo item ter sido removido, o terceiro se torna o primeiro item e assim por diante.

Um bom exemplo da vida real de fila é quando as pessoas fazem fila para esperar por um serviço ou mercadoria. A primeira pessoa é atendida antes da última. No entanto, a fila de que falamos neste tutorial, é a fila de software, conforme projetado em C++.

FIFO

FIFO significa Primeiro a Entrar, Primeiro a Sair. É outra forma de valorizar a fila. Isso significa que o primeiro item a entrar na lista, é o primeiro item a ser removido, sempre que a remoção ocorrer. O início da lista é denominado cabeça ou frente; o final da lista é chamado de costas ou cauda.

Operações Essenciais

Uma fila de software deve ter pelo menos as seguintes operações:

Empurre

Esta operação adiciona um novo elemento na parte de trás da fila. Esta operação é oficialmente chamada de enfileirar.

mudança

Esta operação remove o primeiro elemento da fila, e o segundo elemento se torna o novo primeiro elemento. Esta operação é oficialmente chamada de dequeue. Chama-se pop em C++.

Este artigo explica como usar a estrutura de dados da fila C ++. Você deve conhecer os ponteiros e referências de C ++ para entender o restante deste artigo.

Classe e Objetos

Uma classe é um conjunto de variáveis ​​e funções que funcionam juntas, onde as variáveis ​​não têm valores atribuídos a. Quando os valores são atribuídos às variáveis, a classe se torna um objeto. Valores diferentes dados à mesma classe resultam em objetos diferentes; ou seja, objetos diferentes são da mesma classe com valores diferentes. A criação de um objeto a partir de uma classe é considerada uma instância do objeto.

O nome, fila, é uma classe. Um objeto criado a partir da classe de fila tem um nome escolhido pelo programador.

Uma função que pertence a uma classe é necessária para instanciar um objeto da classe. Em C ++, essa função tem o mesmo nome que o nome da classe. Os objetos criados (instanciados) a partir da classe têm nomes diferentes dados a eles, pelo programador.

Criar um objeto da classe significa construir o objeto; também significa instanciar.

Um programa C ++ que usa a classe de fila começa com as seguintes linhas na parte superior do arquivo:

#incluir
#incluir
usando namespace std;

A primeira linha é para entrada / saída. A segunda linha é para permitir que o programa use todos os recursos da classe de fila. A terceira linha permite que o programa use os nomes no namespace padrão.

Sobrecarregando uma função

Quando duas ou mais assinaturas de função diferentes têm o mesmo nome, esse nome está sobrecarregado. Quando uma função é chamada, o número e tipo de argumentos determinam qual função é realmente executada.

Construção

fila nome()

A declaração a seguir instancia uma fila chamada, que do tipo int.

fila That;

A fila esta vazia. A declaração começa com a palavra reservada, fila seguida por colchetes angulares com o tipo de dados. Então você tem o nome dado ao programador para a fila.

Construindo com lista de inicializador

A definição a seguir mostra como criar uma fila com lista de inicializadores:

fila que (1.1, 2.2, 3.3, 4.4);

Destruindo uma fila

Para destruir uma fila, basta deixá-la sair do escopo.

Acesso ao elemento da fila

push (valor)

Uma fila é uma lista do primeiro a entrar, primeiro a sair. Então, cada valor é adicionado na parte de trás. O segmento de código a seguir cria uma fila vazia, após a qual cinco valores flutuantes são adicionados na parte de trás:

fila That;
That.empurre (1.1);
That.empurre (2.2);
That.empurre (3.3);
That.empurre (4.4);
That.empurre (5.5);

size () const

Isso retorna o número de elementos na fila. O código a seguir ilustra:

fila That;
That.empurre (1.1); That.empurre (2.2); That.empurre (3.3); That.empurre (4.4); That.empurre (5.5);
cout << que.size() << '\n';

A saída é 5.

frente()

Isso retorna uma referência ao primeiro elemento da fila, sem remover o elemento. A saída do código a seguir é 1.1.

fila That;
That.empurre (1.1); That.empurre (2.2); That.empurre (3.3); That.empurre (4.4); That.empurre (5.5);
cout << que.front() << '\n';

O elemento não é removido da fila.

front () const

Quando a construção da fila é precedida por const, a expressão “front () const” é executada em vez de “front ()”. É usado no código a seguir, por exemplo.

fila const que (1.1, 2.2, 3.3, 4.4, 5.5);
cout << que.front() << '\n';

Uma referência constante é retornada. O elemento não é removido do vetor. Os elementos da fila não podem ser alterados.

voltar()

Isso retorna uma referência ao último elemento da fila, sem remover o elemento. A saída do código a seguir é 5.5.

fila That;
That.empurre (1.1); That.empurre (2.2); That.empurre (3.3); That.empurre (4.4); That.empurre (5.5);
cout << que.back() << '\n';

back () const

Quando a construção da fila é precedida por const, a expressão “back () const” é executada em vez de “back ()”. É usado no código a seguir, por exemplo.

fila const que (1.1, 2.2, 3.3, 4.4, 5.5);
cout << que.back() << '\n';

Uma referência constante é retornada. O elemento não é removido da fila. Com a const anterior para a construção da fila, os elementos na fila não podem ser alterados.

Capacidade da fila

size () const

- Veja acima

empty () const

Retorna 1 para verdadeiro se não houver elementos na fila ou 0 para falso se a fila estiver vazia. O código a seguir ilustra isso:

fila que1 (1.1, 2.2, 3.3, 4.4, 5.5);
cout << que1.empty() << '\n';
fila que2;
cout << que2.empty() << '\n';

O resultado é:

0
1

Modificadores de fila

pop ()

Uma fila é FIFO, então qualquer elemento que precise ser removido deve ser removido do topo (cabeça) da fila. Esta função de membro remove o primeiro elemento sem retorná-lo. O código a seguir ilustra isso:

fila que (1.1, 2.2, 3.3, 4.4, 5.5);
cout << que.front() << '\n';
That.pop ();
cout << que.size() << '\n';

O resultado é:

1.1
4

uma.troca (b)

Duas filas podem ser trocadas, conforme ilustrado neste segmento de código:

fila que1 (1.1, 2.2, 3.3, 4.4, 5.5);
fila que2 (10, 20);
que1.troca (que2);
cout << "First element and size of que1:
"<< que1.front() <<", "<< que1.size() << '\n';
cout << "First element and size of que2 "<<
que2.frente() <<", "<< que2.size() << '\n';

O resultado é:

Primeiro elemento e tamanho de que1: 10, 2

Primeiro elemento e tamanho de que2: 1.1, 5

Observe que o comprimento de uma fila é aumentado, se necessário. Além disso, os valores que não tiveram substituições são substituídos por algum valor padrão. Os tipos de dados devem ser do mesmo tipo.

Operadores relacionais e de igualdade para filas

Para caracteres comuns em C ++, em ordem crescente, os números vêm antes das letras maiúsculas, que vêm antes das letras minúsculas. O caractere de espaço vem antes de zero e todos eles.

Operadores de igualdade

Retorna 1 para verdadeiro e 0 para falso.

O == Operador

Retorna 1 se as duas filas tiverem o mesmo tamanho e os elementos correspondentes forem iguais; caso contrário, retorna 0. Exemplo:

fila que1 ("tipo", "outra coisa");
fila que2 ("mau");
int num = que1 == que2;
cout << num << '\n';

A saída é: 0.

O != Operador

- oposto do anterior. Exemplo:

fila que1 ("tipo", "outra coisa");
fila que2 ("mau");
int num = que1 != que2;
cout << num << '\n';

O resultado é: 1.

Operadores relacionais

Retorna 1 para verdadeiro e 0 para falso.

O < Operator

Retorna 1 se a primeira fila for o subconjunto inicial da segunda fila, com os elementos das duas partes iguais sendo os mesmos e na mesma ordem. Se ambas as filas forem do mesmo tamanho ou tamanhos diferentes, e movendo-se da esquerda para a direita, um elemento é encontrado na primeira fila que é menor que o elemento correspondente na segunda fila, então 1 ainda será retornado. Caso contrário, 0 é retornado. Exemplo:

fila que1 ("tipo", "outra coisa");
fila que2 ("mau");
int num = que1 < que2;
cout << num << '\n';

A saída é 1. < does not include the case when the size and order are the same.

O> Operador

- oposto do anterior. Exemplo:

fila que1 ("tipo", "outra coisa");
fila que2 ("mau");
int num = que1> que2;
cout << num << '\n';

Produto: 0

O <= Operator

- igual a < but includes the case when the size and order are the same. Example:

fila que1 ("tipo", "outra coisa");
fila que2 ("mau");
int num = que1 <= que2;
cout << num << '\n';

Produto: 1

O> = Operador

- oposto do anterior. Exemplo:

fila que1 ("tipo", "outra coisa");
fila que2 ("mau");
int num = que1> = que2;
cout << num << '\n';

Produto: 0

Classe e seus objetos instanciados

Um valor está para um tipo de dados, assim como um objeto instanciado está para uma classe. A construção da fila também pode aceitar uma classe como um tipo de dados. O programa a seguir ilustra isso:

#incluir
#incluir
usando namespace std;
classe TheCla

público:
int num;
estático char ch;
void func (char cha, const char * str)

cout << "There are " << num << " books worth " << cha << str << " in the store." << '\n';

static void fun (char ch)

if (ch == 'a')
cout << "Official static member function" << '\n';

;
int main ()

TheCla obj1; TheCla obj2; TheCla obj3; TheCla obj4; TheCla obj5;
fila That;
That.push (obj1); That.push (obj2); That.push (obj3); That.push (obj4); That.push (obj5);
cout << que.size() << '\n';
return 0;

A saída é 5.

Lista Vinculada

A lista de filas é tecnicamente chamada de lista vinculada. Existem dois tipos de listas vinculadas para a fila: lista unida simples e lista duplamente vinculada.

Um elemento de lista vinculada individualmente pode ser implementado por uma estrutura de dois membros. Um membro mantém um ponteiro para o próximo elemento e o outro membro mantém o datum (singular para dados).

Um elemento de lista duplamente vinculado pode ser implementado por uma estrutura de três membros. O membro do meio contém o datum, enquanto o primeiro e o terceiro membros contêm ponteiros para seus elementos adjacentes.

Aplicações da Fila

A fila é uma estrutura de dados first-in-first-out. Existem situações na computação em que os dados chegam na forma de uma fila, exigindo um comportamento primeiro a entrar, primeiro a sair.

Compartilhando recursos de computador

Um recurso em um computador é qualquer componente físico ou virtual de disponibilidade limitada. Eles incluem a CPU, placa de vídeo, disco rígido e memória. Compartilhar tal recurso precisa de uma fila.

Manipulação de interrupções

Os periféricos de computador precisam interromper o computador de vez em quando. As interrupções devem ser tratadas da mesma maneira que chegaram. Isso precisa de uma fila.

Gerenciar informações.

A fila pode ser usada, por exemplo, para gerenciar arquivos de aplicativos para um trabalho, se os arquivos estiverem armazenados no computador.

Conclusão

Uma fila é uma estrutura de dados de lista, que pode ser uma lista unida ou uma lista duplamente vinculada. Via de regra, o primeiro elemento que entra na lista é o primeiro elemento a sair. C ++ fornece uma estrutura de dados de fila em sua biblioteca padrão. As categorias de funções de membro e operadores disponíveis para esta estrutura são construção de fila, acesso a elemento de fila, capacidade de fila, modificadores de fila e operadores sobrecarregados de fila.

Qualquer estrutura de dados de fila deve fornecer, pelo menos, as funções de membro push () e pop (). push () significa enviar um novo elemento no final da fila; e pop () significa remover o elemento que está na frente da fila. Infelizmente, em C ++, essas funções não retornam o valor enviado ou exibido. Portanto, para saber o último elemento antes de empurrar, a função extra back () deve ser usada; e para saber o primeiro elemento antes de popping, a função extra front () deve ser usada.

Um valor está para um tipo de dados, assim como um objeto instanciado está para uma classe. Portanto, uma classe específica pode ser usada como um tipo de dados para a instanciação do modelo de fila. Objetos diferentes para a classe tornam-se valores diferentes para a classe.

A fila tem aplicativos no computador. Pode ser usado, por exemplo, para gerenciar arquivos de aplicativos para um trabalho, se os arquivos estiverem armazenados no computador.

Chrys

WinMouse permite que você personalize e melhore o movimento do ponteiro do mouse no PC com Windows
Se você quiser melhorar as funções padrão do ponteiro do mouse, use um freeware WinMouse. Ele adiciona mais recursos para ajudá-lo a obter o máximo do...
O botão esquerdo do mouse não funciona no Windows 10
Se você estiver usando um mouse dedicado com seu laptop ou computador desktop, mas o o botão esquerdo do mouse não funciona no Windows 10/8/7 por algu...
O cursor pula ou se move aleatoriamente enquanto digita no Windows 10
Se você descobrir que o cursor do mouse pula ou se move por conta própria, de forma automática e aleatória ao digitar em um laptop ou computador com W...