C++ 我的ArrayStack怎么了?
所以我一直在尝试实现一个arrayStack,但我似乎在弹出100多个元素时遇到了问题。我的程序在达到100时停止工作。这似乎是一个问题,推动和弹出,但不太明白我的问题是什么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
#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所有其他人的评论都是非常有效的。尤其是参考资料推送。所以仔细阅读。