C++ 我的ArrayStack怎么了?

C++ 我的ArrayStack怎么了?,c++,stack,C++,Stack,所以我一直在尝试实现一个arrayStack,但我似乎在弹出100多个元素时遇到了问题。我的程序在达到100时停止工作。这似乎是一个问题,推动和弹出,但不太明白我的问题是什么 #ifndef _ARRAYSTACK_1_HPP_ #define _ARRAYSTACK_1_HPP_ #include <stddef.h> #include "StackADT.h" #define DEFAULT_SIZE 50 template<class T> class Arra

所以我一直在尝试实现一个arrayStack,但我似乎在弹出100多个元素时遇到了问题。我的程序在达到100时停止工作。这似乎是一个问题,推动和弹出,但不太明白我的问题是什么

#ifndef _ARRAYSTACK_1_HPP_
#define _ARRAYSTACK_1_HPP_

#include <stddef.h>
#include "StackADT.h"
#define DEFAULT_SIZE 50

template<class T>
class ArrayStack_1 : public StackADT<T> {

private: 
T *arrayStack; 
int index;
int maxSize;

public:
// a constructor for the arrayStack that creates and arrayStack of a given size
ArrayStack_1(int size = DEFAULT_SIZE) {
    maxSize = size;
    index = 0;
    arrayStack = new T[size];
}

public:

// a constructor for the arrayStack that creates and arrayStack of a given size
ArrayStack_1(int size = DEFAULT_SIZE) {
    maxSize = size;
    index = 0;
    arrayStack = new T[size];
}

//a destructor that deletes the arrayStack
~ArrayStack_1() {
    delete[] arrayStack;
}

bool Empty() {
    return index==0;
}

void Push(T& item = 0) {
    if (index<maxSize) {
        arrayStack[index]= item;
        index+=1;
    }else {
        T* tempArrayStack = arrayStack; //making a copy of the array stack
        maxSize+=1;
        arrayStack = new T[maxSize];

        for (int i=0; i<maxSize; i++){
            arrayStack[i]=tempArrayStack[i];
        }
        arrayStack[index]=item;
        index+=1;
        delete[] tempArrayStack;

    }
}

T Pop() {
        if(arrayStack[index]==0){
            return 0;
        }else {
            T element = arrayStack[index];
            index--;
            return element;
        }

   }
}
\ifndef\u阵列堆叠\u 1\u水电站_
#定义\u阵列堆叠\u 1\u水电站_
#包括
#包括“StackADT.h”
#定义默认的_大小50
模板
类别ArrayStack_1:公共堆栈ADT{
私人:
T*arrayStack;
整数指数;
int-maxSize;
公众:
//arrayStack的构造函数,用于创建和存储给定大小的arrayStack
ArrayStack_1(整数大小=默认大小){
最大尺寸=尺寸;
指数=0;
arrayStack=新的T[尺寸];
}
公众:
//arrayStack的构造函数,用于创建和存储给定大小的arrayStack
ArrayStack_1(整数大小=默认大小){
最大尺寸=尺寸;
指数=0;
arrayStack=新的T[尺寸];
}
//删除arrayStack的析构函数
~ArrayStack_1(){
删除[]阵列堆栈;
}
bool Empty(){
回报指数==0;
}
无效推送(T&item=0){

如果(index很可能,您应该做的就是在
Pop
函数中将
arrayStack[index]==0
更改为
index==0
。否则,您可能会使用未定义行为的负索引访问
arrayStack

此外,在重新分配堆栈时,应在重新分配之前增加堆栈大小。例如,交换以下行:

    T* arrayStack = new T[maxSize];
    maxSize+=1;
此外,您不会将
arrayStack
的新值分配给您的成员变量,而是在此代码中定义一个新的局部变量。总的来说,这些行应为:

    this->arrayStack = new T[++maxSize];
(注意,您不必编写
this->arrayStack
,简单的
arrayStack=…
就可以完成这项工作-它只是为了明确目的) 不要忘记
删除tempArrayStack
,否则会泄漏内存

编辑 这些行也应交换:

    index+=1;
    arrayStack[index]=item;
同样,您可以使用
++
——在这种情况下,后缀版本:

    arrayStack[index++] = item;

了解与

的区别,例如,你真的应该一步一步地看一下这段代码,看看它在做什么。我不确定你如何才能成功地完成100次迭代

  • 您需要更加注意递增/递减的时间。有时在设置项之前递增,有时在设置项之后递增

  • 推送的是引用而不是指针(arrayStack应该是指针列表)

  • 当遇到溢出情况时,应该将大小加倍,以确保不必在每次推送时重新创建阵列

  • 由于在增大arrayStack的大小时从未删除它,因此会出现大量内存泄漏

  • 您正在分配一个局部变量,而不使用它


  • 您能显示运行代码时收到的实际错误消息吗?它在执行之前就结束了,说array grow by 1。当人们为您修复代码时,您需要停止编辑您的问题。答案不再有意义,因为问题已更改。不,似乎不是这样。那么,请查看@John3136答案。尽管如此我指出的是你的代码也有问题。要彻底解决这个问题,你需要提供调用
    ArrayStack_1
    的代码,以及
    DEFAULT_SIZE
    @dikshant的定义。我想我现在发现了你代码中的大部分错误:)@dikshant所有其他人的评论都是非常有效的。尤其是参考资料推送。所以仔细阅读。