如何实现堆栈列表的功能擦除?

时间:2016-01-31 21:27:29

标签: c++ list stack

我有一个堆栈与int的列表,它的顺序从低到高,位于堆栈的顶部。我需要实现函数erase,函数中给出一个值。该职能的负责人将是:

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

An example about the function do

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

此外,在执行函数后,列表必须由堆栈顶部排序。

我怎么能用C ++做呢?

非常感谢!

1 个答案:

答案 0 :(得分:2)

您基本上有两种操作要实施。

  • 迭代堆栈,如果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但是没有实现这样的运算符进行比较,因此你必须实现自己的函数来告诉排序方法&#34;哪些元素小于另一个元素&#34; (在您的情况下std::stack<int> left, right,如果left,则right小于left.top() < right.top(),因此,比较堆栈的第一个元素)。有很多方法可以提供排序方法这样的函数,我使用了匿名的lambda表达式。