草庐IT

STL容器之queue

全部标签

c++ - STL 函数式——为什么?

在C++标准模板库中,有一个“功能”部分,其中许多类重载了它们的()运算符。在C++中将函数作为对象使用有什么便利吗?为什么我们不能只使用函数指针呢?有什么例子吗? 最佳答案 当然,人们总是可以使用函数指针而不是函数对象,但是函数对象相对于函数指针有一些优势,即:更好的性能:最明显和最重要的优势之一是它们更有可能产生更好的性能。在函数对象的情况下,更多细节在编译时可用,以便编译器可以准确地确定并因此内联要调用的函数,这与函数指针的情况不同,在函数指针的情况下,指针的取消引用使编译器难以确定实际函数将被调用。函数对象是智能函数:函数对

Linux(CentOs7)使用docker容器安装Elasticsearch+kibana

目录1、检查docker是否安装​编辑2、ElasticSearch安装1.拉取elasticsearch镜像2.配置elasticsearch端口3、目录结构4.验证elasticsearch是否启动成功3.kibana安装1.docker安装kibana​编辑2. 启动kibana4、Kibanaserverisnotreadyyet报错解决办法:6.插件安装1. 安装IK分词器2.plugins安装步骤3.安装插件,elasticsearch-analysis-ik版本与elasticsearch保持一致,即7.11.14.退出容器5.重启docker容器6、补充:常用快捷键:1、检查d

c++ - 我可以在 STL::vector::iterator 上做指针运算吗

目前我使用迭代器来搜索vector并测试其元素。我使用访问元素std::vector::iteratorit;if(*it==0);我能否使用相同的指针算术风格逻辑来测试下一个元素(不改变我的迭代器)?我首先需要看看它是否会将迭代器推出边界if(it!=myvec.end())然后测试当前元素和下一个元素if(*it==1&&*(it+1)==1)这会像我预期的那样使用指针工作吗? 最佳答案 是的,std::vector的迭代器是randomaccessiterators所以你添加/减去整数值以获得其他有效的迭代器。从技术上讲,它可

c++ - C++ 标准容器的线程安全

我在这里阅读了很多关于C++的标准容器(如“list”或“map”)是否线程安全的帖子,他们都说这不是一般的。并行读取应该没问题,但是并行写入或并行读取和写入可能会导致问题。现在我发现在www.cplusplus.com在大多数操作期间访问或修改列表是安全的。一些例子:map::find容器被访问(const和非const版本都不会修改容器)。没有访问映射值:并发访问或修改元素是安全的。map::insert容器被修改。并发访问现有元素是安全的,尽管在容器中迭代范围是不安全的。我是否误解了cplusplus.com,或者关于std容器中的线程安全还有什么我必须知道的。提前致谢!PS:我

c++ - 如何使用 STL 集找到第一个小于搜索键的值?

例如,我在std::set中有一组值:{1,2,3,5,6}还有一个搜索键,假设为4,我想找到第一个值。小于搜索键,在这种情况下为3,怎么办?在Java中,TreeSet中有函数greater()、lower() 最佳答案 只需找到lower_bound为那个键然后递减一次。seta;set::iteratorit=a.lower_bound(5);if(it!=a.begin()){it--;cout你可以找到一个完整的例子here. 关于c++-如何使用STL集找到第一个小于搜索键的

c++ - STL/ranges 算法计算加权平均值

假设我有一个成绩vector,其中成绩是structGrade{constintgrade;constintECTS;//weight};是否有STL/range-v3算法/算法可以让我做到这一点?我知道我可以用std::accumulate来做,用一些奇特的类型作为累加器(记住权重的总和),但我正在寻找一个更简单的替代方案(如果存在的话)。 最佳答案 Grade类型本身就足以充当累加器类型。auto[grade_sum,ects]=std::accumulate(grages.begin(),grades.end(),Grade{

c++ - 包装 STL 习惯用法以提高可读性是个好主意吗?

我目前正在开发一个需要尽可能少的外部依赖项的C++项目,因此我几乎坚持使用STL和Boost。直到现在,当涉及到C++时,我几乎一直生活在Qt领域。一般来说,我倾向于尽可能使用C#和Python。今天我想检查std::vector是否包含某个项目。使用Qt,我会这样做:QListlist;list.append(1);list.append(2);list.append(3);if(list.contains(2)){//dosomething}美观易读。但是std::vector没有contains方法,这是一个惊喜。好吧……类似的东西在STL中的用法是什么?找了一圈,好像是这样的:

c++ - STL 数据结构的内存使用,Windows 与 Linux

我有一个大量使用std::map的程序。在Windows下,使用的内存比在Linux下多得多。有谁知道为什么会这样?Linux:最后一个进程耗时42.31秒,使用的内存不超过909MB(RSS900MB)window:最后一个进程耗时75.373秒,使用的内存不超过1394MB(RSS1395MB)我在命令行上使用gcc4.4.3和VS2010C++编译器,并带有发布设置。编辑:抱歉这么晚才回答问题...代码如下所示:enumSymbol{...}classGraphEntry{public:...virtualvoidsetAttribute(Symbolname,Value*val

c++ - 如何将 future 放入容器中?

我正在尝试将异步生成的future放入vector中,因此我不必执行类似以下操作:autof1=async(....);autof2=async(....);...f1.get();f2.get();...我在这段代码中收到的编译错误是“调用‘std::_1::future’的已删除构造函数”。任何人都可以帮助我如何正确地做到这一点。也不确定将future复制到vector中。voidAudioAnalyzer::retrieve(){deque>tempData(data);vector>futures;for(inti=0;i>&aq){while(true){m.lock();i

c++ - C++98 中的容器初始化

我必须使用以下规则构造一个有序容器(必须是可迭代的):Iftheconditionistrue,thecontaineris{1,0},elseit's{0,1}我有以下代码,但我不觉得它“优雅”:vectororderedSides;if(condition){orderedSides.push_back(1);orderedSides.push_back(0);}else{orderedSides.push_back(0);orderedSides.push_back(1);}有没有更好的方法来做到这一点(从简洁和性能的角度来看)? 最佳答案