C++如何达到此代码中的'stack'行为?
C++ how to reach 'stack' behaviour in this code?
我想问两个有关此代码的问题。我只是尝试模拟堆栈。
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作为第一个索引来启动一个动态数组,然后我按下,pop,top值。
第一个问题:为什么我对方法定义有未解决的符号?
第二个问题:关于" stackdata",如果我想声明具有动态大小的"数组",您会发现正确的方法吗?
我愿意改善和最佳实践。我习惯编程语言,但我从未研究过C ,我不想做不好的做法。所以你看到我从一开始就拿走了。
谢谢。
i发布解决方案在您的帮助下可以帮助某人。
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;
}
有几个问题。
-
动态分配或其他方式的数组不是堆栈/队列/向量。您正在创建0
int
s。之后,您的所有元素都具有不确定的行为。您需要您的数组 grow ,即成为向量,例如std::vector
。 -
delete[] &stackdata
的间接水平错误。您的意思是delete[] stackdata
。您正在尝试删除未动态分配的指针。 -
您缺少复制/移动构造函数,并复制/移动分配运算符,因此,一旦将
Stack
运输到任何地方,它将爆炸。(原始实例将对复制/移动实例的同一指针进行delete[]
!)阅读有关三/五/零的规则。
除此之外,它看起来像堆栈。
您的问题 在这里是一个未定义的参考,这很有趣,因为那是您唯一问的一个参考。:)如果您确实确实有这样的事情,那么您的构建系统可能是一个问题(无法编译该源文件),我们看不到。
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- arr[-1]在c++中的奇怪行为
- 继承期间显示未知行为的子类
- 如何在c++中使用引用实现类似python的行为
- G锁定铸造到基础上会释放模拟行为
- 在C++中对T*类型执行std::move的意外行为
- std::当在256字节边界上写入整数时,流的奇怪行为
- 不知道某个东西是否被忽略会引入未定义的行为吗
- 奇怪的构造函数行为
- 重载运算符new[]的行为取决于析构函数
- 不同语言中相同代码的不同行为
- 处理除以零会导致<csignal>意外行为
- 试图理解类对象的行为
- c++11评估顺序(未定义的行为)
- 从结构寻址时,MMAP变量的行为很奇怪
- 我可以做些什么来消除或最小化这种将提供相同功能和行为的代码重复
- std::stack的奇怪行为,pop()返回相同的值
- C++如何达到此代码中的'stack'行为?
- <int>在C++中引用 stack.top() 的返回值的正确行为是什么