我想就这段代码提出两个问题,代码是模拟栈的实现。
Stack.h
#pragma once
namespace stackandqueue {
class Stack
{
private:
int index;
int *stackdata;
public:
Stack();
~Stack();
void push(int val);
int pop();
int top();
bool isEmpty();
};
}
Stack.cpp
#include "stdafx.h"
#include "Stack.h"
namespace stackandqueue {
Stack::Stack() : index{ 0 }
{
stackdata = new int[index];
}
Stack::~Stack()
{
delete[] &stackdata;
}
void Stack::push(int val) {
stackdata[index] = val;
index++;
}
int Stack::pop() {
int val = stackdata[index];
index--;
return val;
}
int Stack::top() {
return stackdata[index];
}
bool Stack::isEmpty() {
return index == 0;
}
}
意义在于让我创造。
Stack stack;
然后它初始化一个动态数组,第一个索引为0,这让我可以推入、弹出和获取值。
第一个问题: 为什么我的方法定义存在未解析的符号?
第二个问题: 关于“stackdata”,如果我想声明一个具有动态大小的“数组”以实现此行为,您认为这是正确的方式吗?
我乐于接受改进和最佳实践。我习惯编程语言,但我从未深入学习过C++,我不想养成不良习惯。所以你看,我从头开始学起。
谢谢。
我发表了解决方案并得到了你的帮助,也许会对某些人有所帮助。
class Stack
{
private:
int index;
int* stackdata;
public:
Stack(int size);
~Stack();
void push(int val);
int pop();
int top();
bool isEmpty();
};
Stack::Stack(int size)
: index {0}, stackdata{new int[size]}
{
}
Stack::~Stack()
{
delete[] stackdata;
}
void Stack::push(int val) {
stackdata[index] = val;
index++;
}
int Stack::pop() {
index--;
return stackdata[index];
}
int Stack::top() {
return stackdata[index-1];
}
bool Stack::isEmpty() {
return index == 0;
}
new[]
意味着您可以提供运行时边界,但这并不意味着无限/可变边界;您要求的内存就是您获得的内存。 - Lightness Races in Orbit