gpt4 book ai didi

C++ 自己的堆栈对象。 push() 中复制了什么?

转载 作者:行者123 更新时间:2023-12-02 10:16:09 28 4
gpt4 key购买 nike

好吧,我在一个类中实现了一个 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;
}

最佳答案

要回答您有关拷贝的问题,请执行以下操作:

stack[index--] = person;

复制一份,因为赋值两边的类型都是 T .

这:
stack.push(person);

也复制一份,因为你正在传递 person按值(value)。为避免此(冗余)拷贝,请声明 push作为:
void push(const T &person)

关于C++ 自己的堆栈对象。 push() 中复制了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61843070/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com