gpt4 book ai didi

c++ - 在 C++ 中实现 setOfStacks

转载 作者:太空狗 更新时间:2023-10-29 21:42:45 24 4
gpt4 key购买 nike

我正在尝试在 C++ 中使用 vector 来实现一组堆栈。因此,我首先声明一个 std::stack 类型的 std::vector,然后在 vector 中的堆栈上执行正常的 push 和 pop 操作。堆栈有一个阈值。如果 vector 中的堆栈已达到其阈值,那么我将向 vector 添加一个新堆栈。实现如下图-

#define threshold 3

class setOfStacks{
std::vector<std::stack<int> > *stacks;
public:
setOfStacks(){
stacks = new std::vector<std::stack<int> >();
};

~setOfStacks(){};

void push(int d){
if(stacks->size()==0){
std::stack<int> newStack;
newStack.push(d);
stacks->push_back(newStack);
}
else{
std::stack<int> s = stacks->back();
std::cout<<s.size()<<"\n";
if(s.size()!=threshold){
s.push(d);
}
else{
std::stack<int> newStack;
newStack.push(d);
stacks->push_back(newStack);
}
std::cout<<s.size()<<"\n";
}

}

void pop(){
if(stacks->size()==0){
std::cout<<"No elements in the stack\n";
}
else{
std::stack<int> s;
s = stacks->back();
if(!s.empty()){
std::cout<<s.top()<<" is being removed\n";
s.pop();
}
else{
stacks->pop_back();
pop();
}
}
}

};

int main(){
setOfStacks stackSet;
stackSet.push(1);
stackSet.push(2);
stackSet.push(3);
stackSet.push(4);
stackSet.push(5);
stackSet.push(6);
stackSet.push(7);
stackSet.push(8);
stackSet.push(9);
stackSet.pop();
stackSet.pop();
stackSet.pop();
stackSet.pop();
return 0;
}

我面临的问题 - 1 被插入到第一个堆栈中,堆栈被插入到 vector 中。当我尝试插入 2 时,从 vector 返回的堆栈引用中包含 1,其大小低于阈值 3,因此 2 被插入堆栈。但是当我尝试插入 3 时, vector 返回的堆栈引用中没有 2,它又只包含 1。我无法弄清楚为什么会这样?有人可以帮我解决这个问题吗?

最佳答案

这一行:

std::stack<int> s = stacks->back();

获取 stack<int>拷贝来自 stacks .然后当你插入它时,你只是插入拷贝。

将其更改为引用:

std::stack<int> &s = stacks->back();

然后当您使用引用进行更改时,更改将反射(reflect)在您的堆栈 vector 中。

关于c++ - 在 C++ 中实现 setOfStacks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25174245/

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