草庐IT

STL容器之queue

全部标签

c++ - 是否有必要锁定 STL 容器以读取其数据?

我正在编写一个多线程服务器,其中包含5或6个全局数据结构(映射、vector等),并且我正在尝试确定是否需要为某些数据保留互斥锁以便从映射中读取值或vector,或者仅当我要更改数据/添加新项目时才需要持有互斥体。 最佳答案 如果多个线程正在访问容器并且至少有一个线程正在修改容器的内容,则您需要同步对容器的访问。如果没有任何线程修改过容器的内容,则不需要同步对它的访问。[请注意,C++语言标准没有提到线程(至少现在还没有),因此根本不需要容器可以从多个线程使用。也就是说,我上面所说的至少对于标准库的所有主要实现都是正确的,并且是即将

c++ - 合并两个 std::queue

STL中有连接两个std::queue对象的函数吗? 最佳答案 std::queue适配器不支持迭代,因此您实际上必须使用自己的方法来执行此操作。但鉴于您需要此功能,您可能应该考虑使用不同的容器。如果您需要随机访问,可能是std::deque。如果您只需要像队列一样的前/后访问,请考虑std::list,它可以在恒定时间内拼接在一起。 关于c++-合并两个std::queue,我们在StackOverflow上找到一个类似的问题: https://stacko

c++ - 如何使用 STL 将数字格式化为有效数字

我正在尝试使用C/C++(最好是STL)将数字格式化为特定数量的有效数字。我在Javascript(toPrecision())和.Net中看到过这样做的例子,但我找不到任何关于在C/C++中这样做的例子。我想创建一个类似这样的函数:std::stringtoPrecision(doublevalue,intsignificantDigits){std::stringformattedString;//magichappensherereturnformattedString;}因此它会产生这样的结果:toPrecision(123.4567,2)-->"120"toPrecision

c++ - priority_queue、迭代器和排序

考虑一个std::priority_queue,其中N元素具有相同的优先级。现在考虑具有任意优先级的元素的一些pop()和push(),因此生成的队列由所有这些N元素组成上面提到的加上M个新元素,其中所有的N+M元素都具有相同的优先级。下面的pop()是否保证顶部元素的移除遵循FIFO顺序,即首先移除第一个插入的元素?另一个问题是如何找到一个元素并将其从优先队列中移除?(一个简短的例子表示赞赏) 最佳答案 我不认为有任何这样的保证。根据sgi'sdocs,它取决于底层数据结构。我认为大多数常见的实现都使用堆。推送和弹出堆上的任何项目

c++ - g++ 中的 SGI STL 绳索?

似乎在我的/usr/include/c++/4.5.1/ext/rope(和ropeimpl.h)中有rope的实现。我将它与SGISTL进行了比较,代码似乎与代码库几乎相同。我不知道它的状态或者它是否正常工作。我也不知道这是super陈旧的代码,还是正在进行中的代码无论如何,我还没有找到任何关于如何使用它的引用资料(如果功能正常的话)。你知道我错过了什么吗?有我可以使用的用法示例吗?编辑如果您看到cvshistoryhere,您会看到上次事件是4个月前,看起来不太活跃,但也没有被遗弃。 最佳答案 它直接取自SGI代码,并且仍在维护

C++初阶:容器适配器介绍、stack和queue常用接口详解及模拟实现

介绍完了list类的相关内容后:C++初阶:适合新手的手撕list(模拟实现list)接下来进入新的篇章,stack和queue的介绍以及模拟:文章目录1.stack的初步介绍2.stack的使用3.queue的初步介绍4.queue的使用5.容器适配器5.1含义5.2STL标准库中stack和queue的底层结构6.模拟stack和queue文件规划和一览6.1模拟stack(stack.h)6.2模拟queue(queue.h)1.stack的初步介绍stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。stack是作为容器适配

数组 容器 递归 普通排序 线性排序

《数据结构与算法之美》读书笔记写在前面这本书的大部分内容比较浅显,因此只挑DSAA课程上没有涉及或没有深入讨论的点总结第二章数组相关提高传统数组插入/删除数据效率的方法:如果插入的数据不要求有序,可以直接把某位的原数据替换成新数据,然后把原数据放到数组末尾,避免大面积的数据移动。删除时不用一个一个删,可以先把要删的元素一个个标记好,等到数组中没有更多的存储空间时一并集中删除。警惕C语言中数组访问越界的问题,通过内存公式计算出的内存地址是可用的,即便越界,程序也可能不报任何错。容器(ArrayList/vector)VS传统数组:容器好用,上手快,封装性强,但有时需要装箱拆箱,存在性能损失。插入

c++ - 使用 C++ STL 的 DFT(离散傅里叶变换)

我尝试计算此数组x_1的DFT。它一定很简单,但我的值(value)观太低了。我的代码有什么问题?请不要指向其他示例的链接-只是为我自己的代码寻找修复。#include#include#includeintmain(){constunsignedintN=20;constdoublex_1[N]={0,0.3,0.6,0.8,1,1,0.9,0.7,0.5,0.2,0.2,0.5,0.7,0.9,1,1,0.8,0.6,0.3,0};for(unsignedintk=0;ksum(0.0,0.0);for(unsignedintj=0;jmy_exponent(0.0,M_PI/N*(

c++ - 使用带有 STL 容器的 boost.serialization 作为模板参数

我想将boost.serialization与模板化容器类一起使用://MyContainer.htemplatestructMyContainer{Tt;templatevoidserialize(Archive&archive,constunsignedversion){archive&t;}};当我使用STL容器作为模板参数时,例如//Main.cpp...MyContainer>mc;std::ofstreamofs("foo.bar");boost::archive::binary_oarchiveoa(ofs);oa...VisualStudio11提示并显示以下错误消息:

c++ - 排序和连接百万或十亿 STL vector 的最快方法

将数百万或数十亿个STLvector排序并串联成单个STLvector的最佳方法是什么。目前,我的做法是迭代vector并执行每个操作。这是伪代码typedefunsignedlonglongintULLInt;ULLIntN=1000000;vector>vecVec(N,vector());vectorconcatVec;//...//...fillvectorsinsidevecVechere//..wealsogetherethetotalnumberofvaluesinsertedinallvectors(count)//...//reservethespaceconcatV