Ir ao conteúdo

Posts recomendados

Postado

Pretendo criar uma fila com 20 posições, usando vector. Gostaria de uma ajuda para corrigir erros dos códigos nos arquivos que seguem. Gostaria de excluir somente o 1º da fila, reorganizando os índices.

 

  Queue.h

#pragma once
#include <iostream>
#define MAX 19
class Queue{
	private:
		vector<string>queue(MAX);
		unsigned short ind_line = 0;
		
	public:
		Queue();	
	public:
		void people_insert();
		void people_show();
		void people_delete();
};

Queue.cpp

#include "Queue.h"
using namespace std;
#include <vector>
#include <string>
Queue::Queue() {
	char ent = ' ';
	cout << "Enter 'i' to insert an element;" << endl;
	cout << "Enter 'd' to delete an element;" << endl;
	cout << "Enter 's' to show the element's queue, or;" << endl;
	cout << "Enter 'e' to EXIT: ";
	cout << endl;
	cin >> ent;
	while (ent != 'e'){
		switch(ent){
			case 'i': people_insert();
			break;
			case 'd': people_delete();
			break;
			case 's': people_show();
			break;
			case 'e': exit(1);
			}
		} 
};
void Queue::people_insert(){
	unsigned short ind = 0;
	string name = "";
	if (queue.size() == MAX){
		cout << "The list is full!";
	}
	else{
		cout << "Enter the name: " << endl;	
		cin >> name;
		queue.push_back(name);
		ind = queue.size();
		ind_line = queue.size() + 1;
		cout << "You insert " << name;
	}
}
void Queue::people_show(){
	cout << "There is/are " << queue.size() << " people in the line: " << endl;
	for (unsigned short ind=0; ind<queue.size(); ind+=1){
		cout << ind+1 << " - " << queue[ind] << endl;
	}
}
void Queue::people_delete(){
	cout << "Function not yet developed!" << endl;
}

main.cpp

#include "Queue.h"

int main(){
	Queue element;
}

Resultado em anexo.

 

image.png

  • Obrigado 1
Postado

pois é: C++ tem queue na biblioteca padrão. Mude isso. E é meio confuso chamar um vetor de queue de todo modo. 

 

Escreva em torno dos dados: o limite deve fazer parte da classe. É mais simples. Essa é a noção de encapsulamento.

 

Sua fila é de string. Não deve misturar lógica com entrada de valores. Prefira sempre insert(string) e levará grande vantagem por exemplo na hora de testar. NUNCA escreva um programa interativo. Só vai perder tempo.

  • Obrigado 1
Postado
Em 13/05/2022 às 22:09, arfneto disse:

 NUNCA escreva um programa interativo.

Desculpe, mas não compreendi. Da forma como escrevi, seria um programa interativo? 

Tenho as seguintes dúvidas: 1) é prudente incluir switch no construtor? 2) Se uso #include <vector> no arquivo .h, é preciso usá-lo também nos demais arquivos .cpp do projeto? 3) Pode-se declarar vector<string>vet(19) no construtor?

Postado
Em 13/05/2022 às 21:51, MUrisCuri disse:
Queue::Queue() {
	char ent = ' ';
	cout << "Enter 'i' to insert an element;" << endl;
	cout << "Enter 'd' to delete an element;" << endl;
	cout << "Enter 's' to show the element's queue, or;" << endl;
	cout << "Enter 'e' to EXIT: ";
	cout << endl;
	cin >> ent;

 

10 horas atrás, MUrisCuri disse:

Desculpe, mas não compreendi. Da forma como escrevi, seria um programa interativo? 

 

Se dentro do próprio construtor você escreve mensagens na tela e lê um valor então o que falta para ele ser um programa interativo?

 

Se você declarar

 

	Queue minha_fila[300];

 

adivinhe o que vai acontecer quando for testar seu programa... 😉 

 

Repito: nunca escreva um programa interativo. É um desastre. Use constantes, factory functions (funções geradores) ou simplesmente arquivos. Se precisa de interatividade coloque ao final com tudo testado.

 

10 horas atrás, MUrisCuri disse:

1) é prudente incluir switch no construtor? 2) Se uso #include <vector> no arquivo .h, é preciso usá-lo também nos demais arquivos .cpp do projeto? 3) Pode-se declarar vector<string>vet(19) no construtor?

 

  • Porque a preocupação com esse comando em particular? Não faz diferença alguma.
  • cada header deve ser incluído uma única vez. Para isso se usam include guards ou diretivas #pragma once. Veja no manual.

    Exemplo de include guard na wikipedia
    #ifndef GRANDPARENT_H
    #define GRANDPARENT_H
    
    struct foo {
        int member;
    };
    
    #endif /* GRANDPARENT_H */

     

  • vector<string>vet(19) é uma opção comum. Vai criar 19 elementos. Se faz sentido vai depender de seu programa claro. Mas não parece fazer sentido. Evite números mágicos. E como eu disse não chame o vetor de queue...

 

 

 

 

 

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!