Стек на C++ вручную

#include <iostream>
#include <algorithm>

using namespace std;

struct vector {
    vector *nextElem;
    int ans;
    int length;
    vector(int n) {
        this->ans = 0;
        vector *next = nextElem;
        for (int i=0; i<=n; i++){
            next->ans=0;
            next=next->nextElem;
        }
        length = n;
     }
     vector(int n, int val) {
        this->ans = val;
        vector *next = nextElem;
        for (int i=0; i<=n; i++){
            next->ans=val;
            next=next->nextElem;
         }
         length = n;
     }
     void push_back(int val) {
         vector *next = nextElem;
         for (int i = 1; i < length; i++) {
               next=next->nextElem;
         }
         length++;
         next->ans = val;
     }
     void pop_back() {
         vector *next = nextElem;
         for (int i = 0; i < length; i++) {
               next=next->nextElem;
         }
         length--;
         next->nextElem=0;
     }
    int get(int i) {
       vector *next = nextElem;
       if (i > 0) {
            for (int j = 1; j < i; j++) {
                   next=next->nextElem;
            }
        return next->ans;
       } else return ans;
    }
    int size() {
        return length;
    }
};





int main() {
    vector *v;
    v = new vector(2, 10);
    v->push_back(0);
    std::cout << v->size() << std::endl; // 3
    std::cout << v->get(2) << std::endl; // 0
    std::cout << v->get(1) << std::endl; // 10
    std::cout << std::endl;
    v->pop_back();
    v->pop_back();
    std::cout << v->size() << std::endl; // 1
    std::cout << std::endl;
    v->push_back(5);
    v->push_back(17);
    v->push_back(3);
    std::cout << v->get(0) << std::endl; // 10
    std::cout << v->get(1) << std::endl; // 5
    std::cout << v->get(3) << std::endl; // 3
    std::cout << v->size() << std::endl; // 4
}

Конструктор с одним параметром создаёт стек из n элементов, значением которых является 0; с двумя параметрами - со значением val. Методы push_back и pop_back создают и удаляют элементы в стеке. Метод get возвращает значение элемента по параметру i, ну и size возвращает кол-во элементов в последовательности. Отчёт элементов начинается с 0.

Вроде бы работает всё хорошо, но после выполнения в Code::Blocks выводится сообщение Process returned -1073741571 (0xC00000FD) execution time : 1.473 s. Помогите


Ответы (1 шт):

Автор решения: Максим Филимонов
struct vector {
    int *arr;
    int length;

    vector (int n) {
        arr = new int[n];
        for (int i = 0; i < n; i++) {
            *(arr+i) = 0;
        }
        length = n;
    }

    vector (int n, int val) {
        arr = new int[n];
        for (int i = 0; i < n; i++) {
            *(arr+i) = val;
        }
        length = n;
    }

    void push_back(int val) {
        int *newArr = new int[length+1];
        for (int i = 0; i < length; i++) {
            *(newArr+i) = *(arr+i);
        }
        *(newArr+length) = val;
        length++;
        arr = newArr;
    }

    void pop_back() {
        int *newArr = new int[length-1];
        for (int i = 0; i < length-1; i++) {
            *(newArr+i) = *(arr+i);
        }
        length--;
        arr = newArr;
    }

    int get(int i) {
        return *(arr+i);
    }

    int size() {
        return length;
    }
};

Переписал всё на динамических массивах

→ Ссылка