草庐IT

STL容器之queue

全部标签

c++ - STL 无序容器的局部迭代器有哪些用途?

在C++标准§23.2.7无序关联容器[unord.req]中表91描述了STL无序关联容器必须满足的附加要求。在此表中,标准规定STL无序容器(即unordered_set、unordered_map、unordered_multiset和unordered_multimap)必须作为成员类型提供local_iterator和const_local_iterator.local_iterator是一个迭代器类型,其类别、值、差异、指针和引用类型与无序容器的iterator相同。此迭代器可用于迭代单个存储桶但不能跨存储桶。const_local_iterator是一个迭代器类型,其类别

蓝桥杯-常用STL(一)

常用STL🎈1.动态数组🎈2.vector的基础使用🔭2.1引入库🔭2.2构造一个动态数组🔭2.3插入元素🔭2.4获取长度并且访问元素🔭2.5修改元素🔭2.6删除元素🔭2.7清空🎈3.vector的基础应用🔭3.1例题一🎈4.用动态数组存储自定义数据🔭4.1二维的动态数组🎈1.动态数组🔎有些时候想开一个数组,但是却不知道要开多大长度的数组合适,因此我们需要用到的数组可能会根据情况变动。这时候我们就需要用到动态数组。所谓动态数组,也就是不定长数组,数组的长度是可以根据我们的需要动态改变的。动态数组的实现也不难,但是C++里面有已经写好的标准模板库(StandardTemplateLibrary)

C++ 原子列表容器

我正在研究std::atomic但我认为我没有完全理解这个概念。我想知道为什么没有原子容器。所以我玩了一下。首先,我尝试了以下操作:std::atomic>atomicList;但是正如其他一些人已经指出的那样,这是行不通的,因为构造函数是noexcept。所以我创建了一些hack:templateclassMyList{public://MakesurethatnoexceptionisthrownMyList()noexcepttry:l(){}catch(...){}voidpush_back(constT&t){l.push_back(t);}voidpop_front(){l

c++ - 授予对封装容器的访问权限

classX{public:typedefstd::listContainer;//(1)constContainer&GetElements()const;//(2)Container::iteratorElementBegin();Container::iteratorElementEnd();//(3)CustomIteratorGetElementIterator();private:Containerm_container;};我正在寻找一种一致且干净的方法来为调用者提供封装容器的迭代器。我想到了上面源码中标注的三个思路。提供size()、begin()和end(),非常适合

c++ - 如何按元素出现次数将多重集排序到容器

我想获取按元素出现次数排序的元素。这就是我想出的(mHeights是一个std::multiset):namespace{templateclassHistPair{public:HistPair(Ucount,Tconst&el):mEl(el),mNumber(count){}Tconst&getElement()const{returnmEl;}UgetCount()const{returnmNumber;}private:TmEl;UmNumber;};templatebooloperatorconst&left,HistPairconst&right){returnleft.

c++ - 一堆独特元素的容器

我想做的是构建一个包含唯一元素的堆栈。如果一个元素被推送到已经在堆栈中的元素,则该元素不会被推送,但现有的元素应该被移动到堆栈的顶部,即ABCD+B>ACDB我想问一下哪个容器是拥有此功能的最佳选择。我决定在列表上使用堆栈适配器,因为list确实为元素移动提供了常数时间list是堆栈中原生支持的容器之一。我选择的缺点是我必须手动检查重复元素。附言我的编译器不是最新的,所以请不要建议unordered_set。 最佳答案 基本上,您必须在恒定时间移动+长时间搜索或恒定时间搜索+长时间移动之间做出选择。很难说哪个更耗时,但考虑一下:每次

c++ - 将变体 SAFEARRAY 转换为 STL 容器的通用函数

我有一些函数可用于将2D变体SAFEARRAY转换为各种STL容器,有点像这样(仅供说明)templatestd::setSetFromSafeArray(VARIANTsrcArray){CComSafeArraysrcComArray(srcArray.parray);std::setdestContainer;for(ULONGi=0;i我觉得这不是一种非常符合C++风格的处理方式,这意味着我转换到的每个STL容器都有一个单独的函数。我的想法是为CComSafeArrays编写一个包装器和自定义迭代器,这样我就可以...std::copy(srcComArray.begin(),

c++ - 如何使 boost::lockfree::queue 动态调整大小

boost::lockfree::queue的文档提到push可以在需要时分配更多空间。然而,我终其一生都无法弄清楚如何实例化这样一个队列,而且我找不到它的例子。boost网站上的所有示例都是固定容量的。这是我正在查看的文档:http://www.boost.org/doc/libs/1_54_0/doc/html/boost/lockfree/queue.html 最佳答案 队列的默认大小是可变的。这由typename...Options模板参数控制。此外,还有一个错误,即使队列大小可变,队列也需要静态设置的容量。这可以通过使用采

c++ - 所有权应该在 STL 容器调用其值的析构函数之前还是之后结束?

在下面的代码中,一个X在全局容器中注册,成为它的共享所有者。X的析构函数测试它不再是此类所有权的一部分,我希望这是被销毁的有效先决条件。#include#includestructX{~X();};std::vector>global_x_reg;X::~X(){for(autoiter=global_x_reg.begin(),end=global_x_reg.end();iter!=end;++iter)if(iter->get()==this)throw"Oops.Xgetsdestroyedwhileitisstillowned!";}intmain(intargc,char*

c++ - 在标准的无序容器中实现了什么哈希方法?

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭7年前。Improvethisquestion由于语言标准很少规定实现方法,我想知道C++标准库实现(libc++、libstdc++和dinkumware)使用的真实世界哈希方法是什么。如果不清楚,我希望答案是这样的方法:散列与链接除法/乘法散列通用哈希完美散列(静态、动态)使用开放寻址进行散列(线性/二次探测或双重散列)罗宾汉哈希法布隆过滤器布谷鸟哈希知道为什么选择一种特定方法而不是其他方法也是一件好事。