草庐IT

stl-algorithm

全部标签

c++ - 什么是 STL 容器的纯 C 替代品?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:ContainerClass/LibraryforC使用C++而不是C的主要原因之一是STL提供了极其方便的容器。但是,如果我想用纯C编写我的代码而不必从头开始编写我的所有容器,我有什么选择?一些我听说过(但从未使用过)的是能说会道iMatix标准函数库来自Linux内核header的不同元素(例如list)任何关于纯C(Ansi或其他)容器的意见和/或经验将不胜感激。

由 C++ STL 卷积

是否有一个很好的算法实现来计算C++STL(或什至提升)中两个范围的卷积?即带有原型(prototype)的东西(两个范围a..b和c..d的卷积):templatevoidconvolution(Iteratora,Iteratorb,Iteratorc,Iteratord);修改a..b范围 最佳答案 是std::transformstd::transform(a,b,c,a,Op);//abisthethefirstinputrange//cisthestartofthesecondrange(whichmustbeatlea

c++ - STL 堆栈和 priority_queue 的插入器

std::vector、std::list和std::deque有std::back_inserter,并且std::set有std::inserter。对于std::stack和std::priority_queue我假设等效的插入器是push()但我不能似乎找不到要调用的正确函数。我的意图是能够将以下函数与正确的插入迭代器一起使用:#include#include#includetemplatevoidfoo(outiteroitr){staticconststd::strings1("abcdefghji");staticconststd::strings2("123456789

c++ - 用于进程间共享内存的非 Boost STL 分配器?

由于我工作的政策,我无法使用高于1.33.1的Boost版本,也无法使用高于4.1.2的GCC版本。是的,这是垃圾,但我对此无能为力。Boost1.33.1不包含进程间库。也就是说,我的一个项目需要将std::map(或者更可能是std::unordered_map)放入共享内存。当进程由单个进程(“服务器”)加载并由许多其他进程读取时,它只会被写入/修改一次。我以前没有做过共享内存IPC,所以这对我来说是一个相当新的领域。我查看了shmget(),但似乎我无法持续使用相同的共享内存key进行分配(因为我认为STL容器分配器需要)。是否有任何其他使用共享内存的NON-BOOSTSTL分

c++ - 具有自定义比较函数对象的 STL 映射

我想使用STL的Map容器通过使用二进制数据作为键来查找指针,所以我编写了这个自定义函数对象:structmy_cmp{booloperator()(unsignedchar*const&a,unsignedchar*const&b){return(memcmp(a,b,4)像这样使用它:mapmymap;这可以编译并且似乎可以工作,但我不确定“unsignedchar*const&”类型是什么以及为什么它不能仅与“unsignedchar*”一起工作? 最佳答案 您需要提供一个比较器来保证不修改传递的值,因此是const(注意它适

c++ - postfix++/-- 运算符的低效率是否会针对 STL 迭代器进行优化?

我知道自增/自减运算符的后缀版本通常会由编译器针对内置类型进行优化(即不会进行复制),但iterator是否属于这种情况是吗?它们本质上只是重载运算符,可以通过多种方式实现,但由于它们的行为是严格定义的,能否优化它们,如果可以,它们是否被任何/许多人优化编译器?#includevoidfoo(std::vector&v){for(std::vector::iteratori=v.begin();i!=v.end();i++){//willthisgetoptimisedbythecompiler?*i+=20;}} 最佳答案 在st

c++ - 为什么STL头文件没有扩展名?

我有这个基本的疑问。STLheader没有.h扩展名。#include#include这背后有什么具体原因吗?任何人都知道这背后的历史,请分享。编辑:@GManfoundMichaelBurr'sanswerwhichaddressesthisquestion. 最佳答案 #include指令不区分文件类型(它只是一种美化的复制粘贴操作)-不会自动添加.h。提供的C++标准头文件没有.h扩展名有时供应商提供的向后兼容头文件具有相同的名称并添加了.h扩展名这一切都与命名空间有关。C++标准header的.h对应物通常#includes

c++ - 为什么 gcov 为 STL header 创建代码覆盖率数据?

当我运行gcovfoo.cpp时,它不仅会生成foo.cpp的代码覆盖率报告,还会生成foo.cpp使用的所有STLheader的代码覆盖率报告。有没有办法避免这种情况?它似乎忽略了像这样的标准库头文件.编辑刚在gcc邮件列表上看到这篇文章:Re:gcc,gcovandSTL 最佳答案 -r--relative-onlyOnlyoutputinformationaboutsourcefileswitharelativepathname(aftersourceprefixelision).Absolutepathsareusually

现有数据的 C++ STL vector

我可以使用我预先存在的数据创建一个std::vector而不是分配新内存和复制数据吗?更清楚地说,如果我有一个内存区域(一个c数组或另一个vector的一部分或其他)并且我想提供对它的类似vector的访问,我可以创建一个vector并告诉它使用这个内存块? 最佳答案 不,但是您可以编写自己的类来执行此操作。由于这是一个相当普遍的需求,如果其他人已经这样做了,我也不会感到惊讶。然而,正常的C++方法是编写模板代码来对迭代器进行操作。您可以为vector的任何部分或C数组的任何部分(以及其他许多部分)创建迭代器。因此,为迭代器编写模板

c++ - 是否有一些 STL 函数可以获取两个 C++ vector 的笛卡尔积?

假设b=["good","bad"]a=["apple","mango"]thenoutput=["goodapple","goodmango","badapple","badmango"]我知道这可以通过嵌套的for循环来完成,但是是否有一些优雅的代码可以使用C++STL来完成此操作? 最佳答案 这是一行(从JonathanMee's回答postedhere复制):for(size_ti=0,s=a.size();i完整示例here. 关于c++-是否有一些STL函数可以获取两个C++