gpt4 book ai didi

c++ - 如何实现堆栈列表的删除功能?

转载 作者:搜寻专家 更新时间:2023-10-31 02:17:56 25 4
gpt4 key购买 nike

我有一个包含 int 堆栈的列表,它按从低到高的顺序排列,位于堆栈顶部。我需要使用函数中给定的值来实现函数删除。该函数的负责人是:

void Delete(list<stack<int> > &L, int element)

An example about the function do

左边是函数调用前的列表,右边是函数调用后的列表。

此外,函数执行后列表必须按栈顶排序。

我如何用 C++ 实现?

非常感谢!

最佳答案

基本上有两个您想要实现的操作。

  • 遍历堆栈,如果为 top == element,则将其删除。
  • 排序列表

遍历列表看起来与此类似

for (auto iter = list.begin(); iter != list.end(); ++iter)
{
// element exists and is equal to required input
// same as !iter->empty()
if (iter->size() && iter->top() == element)
iter->pop();

// deleted last element
// same as iter->empty()
if (!iter->size())
iter = list.erase(iter);
}

使用 list::sort 排序也很简单

list.sort([](const std::stack<int>& left, const std::stack<int>& right) {
return left.top() < right.top();
});

编辑关于您在评论中的问题。
调用 list.sort() 将尝试使用 std::stack<int> 对列表元素(代码中的 operator< )进行排序。 std::stack 但是没有实现这样的比较运算符,因此您必须实现自己的函数,告诉排序方法“哪些元素比另一个小”(在您的情况下 std::stack<int> left, rightleft 小于 right if left.top() < right.top() ,因此,比较第一个元素堆栈)。有很多方法可以提供排序方法这样的功能,我使用匿名 lambda 表达式。

关于c++ - 如何实现堆栈列表的删除功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35119690/

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