草庐IT

栈队列

全部标签

c++ - 为优先级队列重载运算符<

我正在尝试为我制作的类创建一个优先级队列-std::priority_queuenodes;我像这样重载了Position中的boolPosition::operator但是,每当我尝试编译时,我都会收到此错误消息,提示error:nomatchfor‘operator我在这里错过了什么?感谢您的帮助。 最佳答案 关系运算符不应更改操作数。尝试:boolPosition::operator我的猜测是__x或__y(或两者)都是const。如果__x是const,则不能调用非常量成员函数,也不能将__y作为传递right参数,如果__

与 vector 相比,C++ STL 队列内存使用情况?

我想知道与vector相比,队列到底使用了多少内存。前几天我遇到了一个问题,我有一个使用大约60MB的int队列数组,当相同的数据被放入一个vector的vector中时,它使用了大约4MB。这是我在编写程序时的错误,还是STL队列通常使用比vector更多的内存? 最佳答案 std::queue是容器适配器,而不是容器本身。那么让我们比较一些实际容器的开销:std::vector非常节省内存,它几乎使用零开销。std::vector在大多数平台上,每个项目使用大约4个字节。std::list内存效率非常低,每个项目可能会使用两个开

数据结构:栈和队列

王有志,一个分享硬核Java技术的互金摸鱼侠加入Java人的提桶跑路群:共同富裕的Java人今天我们来学习线性表中最后两种数据结构:栈和队列。它们是两种比较特殊的线性表,相较于数组和链表而言,可以认为它们是“高级”的线性表。栈和队列的特点前几天和媳妇聊到大学校门口的美食广场,每到夜晚便人声鼎沸,撸肉串的,喝扎啤的……Holdon!Holdon!(最近沉迷《中国说唱巅峰对决》hhh)。羊肉串和扎啤不就是栈和队列吗?你品,你细品。串肉串的时候,从签子的尖头(栈顶)开始串(入栈),最先串进去的被压倒签子的底部(栈底),而撸串(出栈)也是从尖头开始,最后串进去的却最先被吃掉(后进先出,LIFO,las

c++ - 具有 O(1) 出队和 O(whatever) 入队的优先级队列

我正在用C++编写一个应用程序,其中对优先级队列进行O(1)出队操作至关重要,而入队的复杂性并不那么重要(除非它变成n^2或2^n当然)。一开始我用的是链表。它非常适合出队(O(1)),并且具有良好的入队复杂度。唯一的问题是,对其进行排序。并不是说使用具有O(n)复杂度的插入排序就可以满足我的需要。但是对链表进行排序是一件痛苦的事情。太慢了。vector一点也不好。出队将是O(n)以将所有元素移回一个位置。入队仍然是O(n),但速度要快得多。你能推荐更高效的方法吗?谢谢。 最佳答案 反向排序的vector有O(1)pop_back和

c++ - boost 消息队列线程安全和进程安全吗?

我正在尝试使用boost::interprocess::message_queue将消息从一个进程发送到另一个进程并完成发送者代码。我想知道这个消息队列是否是进程安全的,但没有找到任何关于它的官方公告,而在stackoverflow社区的相关问题中,只有关于boost::interprocess中的共享资源是线程安全的,其中没有提到message_queue。提前致谢。 最佳答案 正如iamnoten所提到的,是的,它是线程/进程安全的。问题已关闭。 关于c++-boost消息队列线程安

C++ 优先级队列查找和修改对象

我正在尝试实现一个A*算法并且我需要一个优先级队列,但是std::priority_queue对我不起作用,因为我需要找到一个元素(aNode对象)是否在priority_queue中,以访问其数据并在必要时修改它。我能以某种方式使用std::priority_queue来做到这一点吗?我将不胜感激代码建议,因为我对std::priority_queue没有太多经验。 最佳答案 "butthethestl::priority_queuedoesn'tworkformebecauseIneedtofindwhetheranelemen

消息队列之王——Kafka

 Zookeeper  在学习kafka之前,我们需要先学习Zookeeper,那Zookeeper是什么呢?Zookeeper是一个开源的分布式的,为分布式框架提供协调服务的Apache项目。Zookeeper工作机制        Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应。也就是说Zookeeper=文件系统+通知机制。Zookeeper特点Zookeeper是一个领导者(Le

c++ - 多线程安全消息队列

这是我的本质:我有线程A,它定期检查消息并处理它们。线程B和C需要向A发送消息。当B和C或B或C试图向A发送消息而A正在处理消息并因此访问队列时,就会出现问题。这个问题通常是怎么解决的?谢谢 最佳答案 这通常使用mutexes解决,或其他多线程保护机制。如果您在Windows上工作,MFC会提供CMutexclass对于这个问题。如果您在posix系统上工作,posixapi会提供pthread_mutex_lock,pthread_mutex_unlock,andpthread_mutex_trylockfunctions.一些基

c++ - 无锁队列中的内存管理

我们一直在寻求在我们的代码中使用无锁队列,以减少当前实现中单个生产者和消费者之间的锁争用。那里有很多队列实现,但我不太清楚如何最好地管理节点的内存管理。例如,生产者看起来是这样的:queue.Add(newWorkUnit(...));消费者看起来像:WorkUnit*unit=queue.RemoveFront();unit->Execute();deleteunit;我们目前使用内存池进行分配。您会注意到生产者分配内存而消费者删除它。由于我们正在使用池,因此我们需要向内存池添加另一个锁以正确保护它。这似乎首先否定了无锁队列的性能优势。到目前为止,我认为我们的选择是:实现无锁内存池。

c++ - 访问队列数据结构的信号处理程序(竞争条件?)

我目前正在用C++编写一个小型shell。作业和与之关联的PID存储在作业指针队列中(job*)。运行新作业时,有关它的信息将添加到队列中。由于可以同时处理多个作业,并且可以随时在shell的控制台输入新作业,因此我有一个信号处理程序来等待终止的作业。当一个作业终止时,我需要从事件作业队列中删除它的信息并将其移动到我的已终止作业的双端队列中。但是,当另一个作业停止时,用户的新作业可能正在添加到队列中。在这种情况下,他们的insert队列操作将被暂停,我的信号处理程序将被调用,它将执行它的pop操作。我想了解如何解决这种潜在的竞争条件,因为我认为在此过程中可能会发生损坏。我不能使用互斥锁