szablony stos c++

szablony stos c++
D1
  • Rejestracja:około 5 lat
  • Ostatnio:prawie 5 lat
  • Postów:5
0

Witam mam problem z szablonem jak zrobić żeby działał dla takiego main-a

Kopiuj
int main(){

    Stack<double> stack;
    for (index = 0; index < 100000;) {
        stack.push((double)std::rand() / RAND_MAX); }
    bool result = stack.empty();
}

i nie wywalało:

terminate called after throwing an instance of 'St9bad_alloc'
what(): std::bad_alloc

szablon:

Kopiuj
#include <iostream>
using namespace std;

template <typename type>
class Stack {

    struct Element {
        type value;
        Element* prev;
    } * tail;

public:
    Stack()
    {
        tail = NULL;
    };

    void push(type val)
    {
        struct Element* e = new Element;
        e->value = val;
        e->prev = tail;
        tail = e;
    };

    type pop()
    {
        if (tail == NULL) {
        }
        else {
            type a = tail->value;
            struct Element* tmp = tail->prev;
            tail = NULL;
            delete tail;
            tail = tmp;
            return a;
        }
    };

    bool const empty()
    {
        if (tail == NULL) {
            return true;
        }
        else {
            return false;
        }
    };

    ~Stack()
    {

        while (tail != NULL) {
            this->pop();
        }
    }
};
edytowany 1x, ostatnio: kq
06
To struct przed Element* jest w C++ zbędne.
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:2 minuty
  • Lokalizacja:Szczecin
1

Kompiluj na 64 bitach i miej więcej ramu.

Kopiuj
for (index = 0; index < 100000;)

Wystarczy że zamienisz pętlę nieskończoną na taką skończoną.

Dlaczego implementujesz stos na liście jednokierunkowej? Tzn to jest poprawne, ale wydaje się średnio sensowne tbh.


edytowany 1x, ostatnio: kq
06
  • Rejestracja:prawie 20 lat
  • Ostatnio:około rok
  • Postów:2440
2
Kopiuj
            tail = NULL;
            delete tail;

Hmm...

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.