我有一个堆栈与int的列表,它的顺序从低到高,位于堆栈的顶部。我需要实现函数erase,函数中给出一个值。该职能的负责人将是:
void Delete(list<stack<int> > &L, int element)
左边是调用函数之前,右边是调用函数后的列表。
此外,在执行函数后,列表必须由堆栈顶部排序。
我怎么能用C ++做呢?
非常感谢!
答案 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表达式。