草庐IT

栈和队列(stack和queue)

全部标签

在类中具有自定义比较函数的 C++ 优先级队列

我正在尝试使用自定义比较函数创建优先级队列,作为类的数据成员。如果我将队列放在一个类中,代码将无法编译,但是如果它在main函数中,它可以正常工作:#include#includeusingnamespacestd;boolcmp(intx,inty){return(x>y);}classA{public:private:priority_queue,decltype(cmp)>pq(cmp);//Erroratpq(cmp):function"cmp"isnotatypename};intmain(){priority_queue,decltype(cmp)>pq(cmp);//no

c++ - C++中的优先级队列

有没有办法在C++中迭代优先级队列?我的理解是它们或多或少是不可变的,容器的唯一操作是对顶部元素。我希望能够打印出优先级队列的内容,但不确定如何解决该问题。 最佳答案 底层容器是一个名为c的protected数据成员(更多细节参见here)。因此,您始终可以从std::priority_queue继承并导出该容器上的几个迭代器(如果可用)。作为一个最小的工作示例:#include#includestructMyPriorityQueue:std::priority_queue{autobegin()const{returnc.beg

c++ - 使用优先级队列结构?

在C++标准库文档中搜索某些函数时,我读到优先级队列的推送和弹出需要恒定时间。http://www.cplusplus.com/reference/stl/priority_queue/push/Constant(inthepriority_queue).Althoughnoticethatpush_heapoperatesinlogarithmictime.我的问题是使用什么样的数据结构来维护一个O(1)的推送和弹出的优先级队列? 最佳答案 我假设您指的是cplusplus.com'spage.在页面前面它说:Thismember

c++ - std::queue::size 的大 O() 顺序是什么?

std::queue类在size成员函数的复杂性方面并不清楚。它似乎是基于当时使用的数据结构实现。一个人会假设size是O(C),但它完全有可能是O(N)。显然,我可以保持自己的大小,但我宁愿只调用size。(修改问题):既然deque是默认容器,那么std::deque::size()的O()是多少? 最佳答案 至少自C++11以来,std::queue::size的复杂度isconstant:O(1)。根据§23.6.3.1/1,std::queue的底层容器必须满足SequenceContainer的要求,这一点得到了保证。,

c++ - 使用作用域 queue::swap 清空 std::queue 是否违反任何规则?

我有很多使用队列的情况,队列的大小可以增长到数百个。不幸的是,如果有必要,没有清空队列的一次性解决方案。我想知道是否使用作用域队列进行交换,然后让作用域队列被销毁,是否会破坏任何内存分配/管理规则?以下片段是我所提议的示例。似乎有效,如果长时间使用多次,则不确定结果。#include#include#includeintmain(){std::queuefoo;foo.push(10);foo.push(20);foo.push(30);std::coutbar;swap(foo,bar);}std::cout 最佳答案 您的代码没

c++ - 如何保证在 Visual Studio 2005 下的 C++ 中捕获 EXCEPTION_STACK_OVERFLOW 结构化异常?

背景我有一个带有Poof-Crash[1]的应用程序。我相当确定这是由于堆栈损坏造成的。应用程序是多线程的。我正在使用“启用C++异常:是的,带有SEH异常(/EHa)”进行编译。我编写了一个SE翻译器函数并用它调用了_set_se_translator()。我已经为set_terminate()和set_unexpected()编写了函数并进行了设置。为了获得StackOverflow,我必须在高负载下以Release模式运行几天。在调试器下运行不是一种选择,因为应用程序的执行速度不足以达到查看问题所需的运行时间。我可以通过在执行其中一个函数时添加无限递归来模拟该问题,从而测试是否捕

c++ - 逆序获取 `std::priority_queue`个元素?

我编写了一些K最近邻查询方法,这些方法构建了一个最接近给定查询点的点列表。为维护该邻居列表,我使用std::priority_queue使得顶部元素是距查询点最远的邻居。这样我就知道我是否应该推送当前正在检查的新元素(如果距离比当前最远的邻居更小)并且当我的优先级队列有超过K个元素时可以pop()最远的元素。到目前为止,一切都很好。但是,当我输出元素时,我想从最近到最远的顺序排列它们。目前,我只是简单地从优先级队列中弹出所有元素并将它们放在输出容器中(通过迭代器),这会产生从最远到最近排序的点序列,然后,我调用std::reverse在输出迭代器范围上。作为一个简单的例子,这是一个使用

c++ - 你能用 lambda 比较器交换 std::queue 吗?

我正在尝试使用https://stackoverflow.com/a/709161/837451中的示例清除std::queue通过交换。但是,由于“已删除函数”错误,它似乎不适用于lambda比较器。最小的工作失败示例:#include#includeusingnamespacestd;intmain(){typedefpairifpair;autocomp=[](ifpaira,ifpairb){returna.second>b.second;};typedefpriority_queue,decltype(comp)>t_npq;t_npqnpq(comp);//dosometh

c++ 函数队列

所以我有多个带有不同参数的方法:classc;voidc::foo1(inta){}voidc::foo2(inta,intb){}如何获得这些函数的队列/vector?它不一定必须是std::function对象,但我需要一种方法来对函数的执行进行排队。 最佳答案 您的问题有点含糊,但如果您在将函数插入队列时已经知道目标对象和调用的参数,则可以使用无参数lambda队列:std::deque>q;cx;q.push_back([&x]{x.foo1(1);});q.push_back([&x]{x.foo2(2,3);});//.

c++ - 在磁盘上实现的 FIFO 队列(或堆栈),而不是 ram(最好在 C++ 中)

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。基本上,我所追求的是标准模板库队列的等价物,其实现方式是使用磁盘进行存储。需要排队的数据量远远大于当今大多数计算机内存中所能存储的数据量。理想情况下,我正在寻找要使用的图书馆。但是,关于如何实现此队列的任何建议都是有用的。