【发布时间】:2020-05-16 20:22:27
【问题描述】:
好吧,我在一个 Class 中实现了一个 FIFO 堆栈(push,pop)堆栈,其中分配了 mem 整数。 所以我问自己:如果“int”是一种数据类型,为什么我不能将“ADTs”推送到我自己的堆栈中。
然后我得到了这个代码:
#include <iostream>
class Person {
std::string name;
int age;
public:
Person(std::string pName = "", int pAge = 1)
{
name = pName;
age = pAge;
}
void Print()
{
std::cout << name << " " << age << std::endl;
}
};
class Stack {
Person * stack;
int size, top;
int index;
public:
Stack(int stackSize)
{
top = stackSize -1;
index = top;
stack = new Person[stackSize];
}
void push(Person person)
{
if (index < 0)
std::cout << "Stack UNDERFLOW" << "Index is: " << index << std::endl;
stack[index--] = person;
}
Person & pop()
{
if (index > top)
{
std::cout << "Stack OVERFLOW" << std::endl;
}
return stack[++index];
}
};
我知道,STL 库中有堆栈、队列、vectos 等。我只是想自己做。 我想要堆栈推送对象的副本。 我不确定我不知道编译器是在推送地址、复制整个对象(我想要什么)还是什么。
请启发我。
这是我的 main() 代码:
int main()
{
Stack stack(100);
Person person("Lucas", 39);
for (int i = 0; i < 100; i++)
{
stack.push(person);
((Person)stack.pop()).Print();
}
return EXIT_SUCCESS;
}
【问题讨论】:
-
然后我得到了这个代码: -- 你可以参加你的工作
int类,用T替换所有这些int,然后创建一个模板基于T,而不是复制粘贴,希望你没有犯错。这将是检验您的代码是否可以使用多种类型的终极测试。 -
@PaulMcKenzie:没错,真是个傻瓜。去试试……
-
((Person)stack.pop()).Print();-- 在此处解释您要执行的操作。额外的演员阵容是完全没有必要的。 -
@PaulMcKenzie 你是对的。现在我明白了。我创建了一个模板并忘记了那个不必要的“演员”。它就像一个魅力!非常感谢您,抱歉的问题。