草庐IT

STL容器之queue

全部标签

c++ - 为成对容器的第一个元素提供迭代器

我有一个装满成对的容器。我想使用STL通用算法对其进行迭代(在我的例子中它将是inner_product,但将其视为通用问题)。我使用的算法首先和最后需要迭代器。我可以提供特殊的迭代器first和last而不是在对上而是在每对的第一个元素上迭代吗?我知道我可以手动完成它,提供一个手工制作的函数对象,它将作为标准容器迭代器的包装器,将其引用到该对本身的第一个成员,但我认为还有一个聪明的单线为我做这件事。会是什么? 最佳答案 我环顾四周,找到了boost::transform_iterator。我想出了这段代码。令人惊讶的是它的效果如何

c++ - 为什么 STL ifstream 和 ofstream 类不将 std::string 作为文件名?

这是对STL的提示。为什么他们将文件名参数作为(char*)而不是std::string?这似乎没有意义。关于这个主题还有另外两个问题:HowtoopenunicodefilenameswithSTLWindowsCodepageinteractionswithC++问题是我有很多看起来像这样的代码:std::ofstreamf(fname.c_str());当我希望它看起来像这样时:std::ofstreamf(fname);上述帖子中提到的其他问题是UTF-16与UTF-8的问题。(UTF-16可能包含会破坏POSIXAPI的NULL)。但这并不是真正的问题,因为实现可以在调用op

c++ - STL 算法是否使用多核?

C++STL算法是否使用CPU的多核底层来提高性能?如果不,是否有任何推荐的库来做STL所做的但多核,比如使用OpenMP?或者是否有任何开关可以在编译期间指定gcc指示STL使用多个内核编辑:我在带有gcc4.4的Ubuntu10.10上使用英特尔酷睿i7960处理器 最佳答案 GNUlibstdc++似乎有一个并行模式,支持STL的几个并行化特性:http://gcc.gnu.org/onlinedocs/libstdc++/manual/parallel_mode.html 关于c

c++ - 如何插入STL集?

我有问题,我不确定我是否理解STL文档。假设我有这个:#include...structfoo{intbar;};structcomp{inlinebooloperator()(constfoo&left,constfoo&right){returnleft.barfooset;//Usescomparisonstruct/classobjectcomptosortthecontainer...return0;}如何使用我自己的比较器结构将结构foo插入到set中? 最佳答案 您可以使用set::insert方法,没有什么可做的。例

c++ - 共享内存中的 boost::lockfree::queue 出现问题(boost 1.53、gcc 4.7.2/clang 3.0-6ubuntu3)

我在放置boost::lockfree::queue,..>时遇到问题在共享内存中。我需要它,因为我必须能够将超过65535条消息插入队列,而fixed_sized队列限制为65535。以下代码工作正常(但capacity选项暗示fixed_sized):typedefboost::interprocess::allocatorShmemAllocator;typedefboost::lockfree::queue,boost::lockfree::allocator>Queue;m_segment=newboost::interprocess::managed_shared_memo

c++ - 使用模板删除任何容器

我有很多代码要删除其中有指针的vector容器,也就是说,我必须先删除所有指针,然后再清除容器。每次我都会手动迭代并删除指针(我知道STL::algorithmsfor_each)。为了规避所有这些代码,我创建了一个模板来删除所有具有指针的vector容器。到目前为止一切顺利。现在我有更多的容器类型,包括映射、并发容器等。就删除而言,它们最终都具有相同的功能。DeleteContainer(std::vector&VecIn)如上所述,我拥有的功能只能用于vector。有什么方法可以让它足够通用以适用于所有容器吗?EDIT:Thanksforalltheanswers,IwishIco

c++ - 如何使用指针为 c++ priority_queue 实现排序方法

我的优先队列声明为:std::priority_queuequeue;classMyClass{booloperator不对队列中的项目进行排序。怎么了?我不想实现不同的(比较)类。答案摘要:问题是,指针地址是排序的。避免这种情况的唯一方法是“比较指针”的类。现在实现为:std::priority_queue,MyClass::CompStr>queue;classMyClass{structCompStr{booloperator()(MyClass*m1,MyClass*m2);}} 最佳答案 将比较仿函数ptr_less赋给查

c++ - 如何以线程安全的方式遍历容器?

我有一个容器(C++),我需要从不同线程以两种方式对其进行操作:1)添加和删除元素,以及2)遍历其成员。显然,在迭代发生时删除元素=灾难。代码看起来像这样:classA{public:...voidAddItem(constT&item,intindex){/*Putitemintomy_stuffatindex*/}voidRemoveItem(constT&item){/*Takeitemoutofm_stuff*/}constlist&MyStuff(){returnmy_stuff;}//*Hate*this,butseeclassCprivate:Mutexmutex;//G

c++ - 具有重复键的 STL 优先级队列 - 这可能吗?

我需要将我的A类对象存储在某种数据结构中。此外,我希望它们根据一个键自动排序,在我的例子中是另一个类B的嵌入对象。因此我决定使用STL优先级队列。然而,有可能2个或更多对象B具有相同的键值。我的问题:STL优先级队列是否允许重复键?如果确实如此,我应该考虑什么以及我应该使用哪个谓词?我知道我可以使用多重集,但它的大O符号性能更差,这就是我想使用优先级队列的原因。 最佳答案 DoestheSTLpriorityqueueallowduplicatekeys??是的。IfitdoeswhatshouldIconsider相等元素之间的顺

c++ - 我可以将 boost::threadpool 用作 'thread-safe queue' 吗?

我需要的实际上是一个线程安全的队列结构,其中多个客户端不断将数据转储到队列中,一个工作线程不断处理并弹出队列STL或Boost中是否存在任何成熟的解决方案?我现在考虑使用Boost::threadpool来做这件事。只需将并行线程数设置为1,每次有新消息从客户端到达时,任务函数的输入参数都会更改。这是否有意义,这里是否存在我尚未预料到的任何限制? 最佳答案 在boost中有一个messagequeueclass,这就是您所需要的:一个线程安全的队列。消息队列是一个广泛用于进程间通信的概念。消息队列是线程安全的队列,其主要特点是它会阻