Jump to content
Fórum Script Brasil
  • 0

Pilha com vetor C++ - Iniciante


BrunaGrassi
 Share

Question

Boa noite,

Estou com dificuldades em fazer uma pilha em C++, pois só conhecia Java. Se puderem me ajudar, agradeço desde já.

A proposta do exercício é criar uma pilha alocada dinamicamente. Tem os métodos empilha, desempilha, topo (verificar o valor), getPosTopo, limparPilha e pilhaCheia. Tem que ser genérica.

Os erros que não consegui solucionar foram: 

Streams are highly discouraged. [readability/streams] [3] na linha do #include<iostream>; 

error: ‘_’ was not declared in this scope * _it = _&pontVetor[0]; na última linha do construtor Pilha() * _it = _&pontVetor[0];

#include<iostream>
template<typename T>
class Pilha {
 private:
    int _tam;
    int _valorTopo;
    int _posiTopo;
    int * _pontVetor;
    int * _it;

 public:
    Pilha() {
        _tam = 10;
        _valorTopo = -1;
        _posiTopo = -1;
        * _pontVetor = new int[_tam];
        * _it = _&pontVetor[0];
    }
    Pilha<T>(int t) {
        _tam = t;
        _valorTopo = -1;
        _posiTopo = -1;
        * _pontVetor = new int[_tam];
        * _it = _&pontVetor[0];
    }
    void empilha(T dado) {
            if (PilhaCheia() != true) {
                (*_it++) = dado;
                _valorTopo = dado;
                _posiTopo = _posiTopo + 1;
            } else {
                std::cout << "A pilha está cheia." << std::endl;
                throw 20;
            }
    }
    T desempilha() {
        if (PilhaVazia() != true) {
            (*_it--);
            _valorTopo = _&pontVetor[*it];
            _posiTopo = _posiTopo - 1;
            return _valorTopo;
        } else {
            std::cout << "A pilha está vazia." << std::endl;
            throw 21;
        }
    }
    T topo() {
        if (PilhaVazia() == true) {
            std::cout << "A pilha está vazia. Não possui topo." << std::endl;
            throw 22;
        }
        return _valorTopo;
    }
    int getPosTopo() {
        if (PilhaVazia() == true) {
            std::cout << "A pilha está vazia. Não possui topo." << std::endl;
            throw 22;
        }
        return _posiTopo;
    }
    void limparPilha() {
        _posiTopo = -1;
    }
    bool PilhaVazia() {
        return (_posiTopo == -1);
    }
    bool PilhaCheia() {
        return (_posiTopo == (_tam - 1));
    }
}

 

Na realidade tem mais erros ocorrendo, porém o que está me impedindo de prosseguir é o erro do #include.

Desculpem-me se postei em lugar que não deveria, ou se fiz algo de errado, esse é meu primeiro post.

Muito obrigada pela atenção!! :)

Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 0

remova os underscor`s das variaveis, crie um construtor vazio Pilha(){} e outro recebedo como parametro a acapacidade da pilha que é seu t e setando a sua pilha uma instancia de vetor de tamanho t Pilha(int t){ this->pilha = int pilha[t]}

O this nesse caso não é estritamente necessarios, somente se as variaveis tiverem o mesmo nome, ai é importante não esquecer de usar, hehe.

 

class pilha{
 private:
	T * pilha;
	int ponteiro = -1;
 public:
	Pilha<T>(){}
	Pilha(int capacidadePilha){
		this->pilha = new T[capacidadePilha];
	}
}

outra coisa, se você tem uma classe pilha de tipos generico, então você deve ter um vetor tambem de tipo generico, vide código de exemplo.

faça isso e veja se compila!!!

Edited by williamthewill
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      149.6k
    • Total Posts
      646.1k
×
×
  • Create New...