草庐IT

stl_algobase

全部标签

c++ - STL find 的性能优于手工循环

我有一些问题。给定以下C++代码片段:#include#include#include#include#includestructincrementor{incrementor():curr_(){}unsignedintoperator()(){returncurr_++;}private:unsignedintcurr_;};templatecharconst*value_found(Vecconst&v,typenameVec::const_iteratori){returni==v.end()?"no":"yes";}templatetypenameVec::const_ite

c++ - 是否所有 C++ STL 都会产生相同的随机数(对于相同的种子)?

是否所有C++STL都会产生相同的随机数(对于相同的种子)?这适用于所有平台吗?这是在某处指定的吗? 最佳答案 不,该标准不需要特定的实现。此外,获取随机数的唯一标准方法是rand和srand,它们不是最初STL的一部分,而是从C中接管的函数。 关于c++-是否所有C++STL都会产生相同的随机数(对于相同的种子)?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6094648/

c++ - 保留插入顺序但不允许重复的 STL 容器

这个问题在这里已经有了答案:关闭11年前.PossibleDuplicate:Astd::mapthatkeeptrackoftheorderofinsertion?我正在寻找一个保留插入顺序(无排序)但不允许重复的STL容器。有吗?如果没有任何我可以用来定制的技巧? 最佳答案 目前没有这样的容器,但您可以通过持有std::vector和std::set以便宜的方式创建自己的容器>一起上课。 关于c++-保留插入顺序但不允许重复的STL容器,我们在StackOverflow上找到一个类似

c++ - 如何从 STL 数据结构中删除 reverse_iterator?

由于某种原因,以下代码失败。您不能简单地使用它的base()方法删除reverse_iterator。#include#includeintmain(){std::setsetOfInts;setOfInts.insert(1);setOfInts.insert(2);setOfInts.insert(3);std::set::reverse_iteratorrev_iter=setOfInts.rbegin();std::set::reverse_iteratornextRevIter=setOfInts.rbegin();++nextIter;while(rev_iter!=set

c++ - 如何将 STL 对象存储在共享内存(C++)中?

我有以下代码模式:classA{doublea,b,c;...};classB{maptable;//CanhavemaximumofMAX_ROWSelements....};classC{Bentries;queued;queuee;...};现在我想在共享内存中存储一​​个C类型的对象,以便不同的进程可以追加、更新和读取它。我怎样才能做到这一点?(注意:我知道如何在共享内存中存储一​​个具有固定大小的简单C数组。另外,请记住B.table可能有任意条目。 最佳答案 使用boost::interprocess,这个库公开了这个功

c++ - 标准库 (STL) 容器是否支持一种 nothrow 分配形式?

new运算符(或对于POD,malloc/calloc)在分配大块内存时支持一种简单而有效的失败形式。假设我们有这个:constsize_tsz=GetPotentiallyLargeBufferSize();//1M-1000MT*p=new(nothrow)T[sz];if(!p){returnsorry_not_enough_mem_would_you_like_to_try_again;}...std::containers是否有任何这样的构造,或者我总是必须处理std::vector和friend的(预期的!!)异常?可能有一种方法可以编写一个自定义分配器来预分配内存,然后将

algorithm - 如何在 C++ (STL) 中否定仿函数?

我有一些函数可以找到一个值:structFindPredicate{FindPredicate(constSomeType&t):_t(t){}booloperator()(SomeType&t){returnt==_t;}private:constSomeType&_t;};boolContainsValue(std::vector&v,SomeType&valueToFind){returnfind_if(v.begin(),v.end(),FindPredicate(valueToFind))!=v.end();}现在我想编写一个函数来检查vector的所有成员是否满足该谓词:b

c++ - GNU STL 字符串 : is copy-on-write involved here?

(免责声明:我不知道C++标准对此会说什么……我知道,我很糟糕)在处理非常大的字符串时,我注意到std::string正在使用写时复制。我设法编写了最小的循环来重现观察到的行为,例如,下面的循环运行得非常快:#includeusingstd::string;intmain(void){stringbasestr(1024*1024*10,'A');for(inti=0;i在循环体a_copy[1]='B';中添加写入时,显然发生了实际复制,并且程序在0.3秒内运行,而不是几毫秒。100次写入使其速度减慢了大约100倍。但后来变得很奇怪。我的一些字符串没有写入,只是读取,这没有反射(re

c++ - Boost vector 与 STL vector

如何boost::numeric::ublas::vector和std::vector比较运行效率?假设我可以从使用std::vector转换整个程序是否安全?使用boost::numeric::ublas::vector只需写:#includeusingnamespaceboost::numeric::ublas;而不是#include?我可以像在所有方面都是STLvector一样使用boostvector吗?从执行函数使用boostvector?他们使用相同的迭代器吗?它们在C++0x中工作吗?它们适用于基于范围的循环吗? 最佳答案

c++ - 自定义类上的 STL 优先级队列

让我的优先级队列识别它应该按哪个参数排序时遇到了很多麻烦。我在自定义类中重载了小于运算符,但它似乎没有使用它。以下是相关代码:节点.hclassNode{public:Node(...);~Node();booloperator节点.cpp#include"Node.h"boolNode::operatorgetTotalCost()getTotalCost()返回一个整数main.cpppriority_queue,less::value_type>>nodesToCheck;我错过了什么和/或做错了什么? 最佳答案 less::