草庐IT

stl_algobase

全部标签

c++ - 通过 dll 边界传递对 STL vector 的引用

我有一个很好的库来管理需要返回特定字符串列表的文件。由于我将使用它的唯一代码将是C++(和Java,但这是通过JNI使用C++),我决定使用标准库中的vector。库函数看起来有点像这样(其中FILE_MANAGER_EXPORT是平台定义的导出要求):extern"C"FILE_MANAGER_EXPORTvoidget_all_files(vector&files){files.clear();for(vector::iteratori=file_structs.begin();i!=file_structs.end();++i){files.push_back(i->full_p

c++ - STL 排序 - 严格的弱排序

为什么STL可以使用strictweakordering的比较函数??为什么不能是偏序? 最佳答案 一个partialorder不足以实现某些算法,例如排序算法。由于偏序集合不一定定义集合的所有元素之间的关系,那么您将如何对在偏序内没有顺序关系的两个项目的列表进行排序? 关于c++-STL排序-严格的弱排序,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1293231/

c++ - 在特定类型元素的任何容器上采用 STL 迭代器的函数

我将如何定义一个函数,该函数将任何类型的STL容器上的迭代器作为输入,但仅限于特定模板类型的那些。例如:std::list::iterator形式的任何迭代器或std::vector::iterator我只是定义函数来获取std::list::iterator,但如果我们切换到不同的STL容器,我不想更改我的代码。有没有办法通过模板或其他方式做到这一点? 最佳答案 您可以使用SFINAE构造如boost::enable_if它验证嵌套的typedefiterator::value_type是否确实是适当的类型。templatetyp

c++ - 检查 STL 容器中元素的类型 - C++

如何获取STL容器所包含的元素的类型? 最佳答案 container::value_type 关于c++-检查STL容器中元素的类型-C++,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1708867/

c++ - 使用 STL 在 Vector 中定位

我尝试使用STL查找算法(和min_element算法)定位vector中最小值的位置,但不是返回位置,它只是给我值。例如,如果是最小值,则位置将返回为8等。我在这里做错了什么?intvalue=*min_element(v2.begin(),v2.end());cout 最佳答案 min_element已经为您提供了迭代器,无需调用find(此外,它效率低下,因为它是工作的两倍)。使用distance或-运算符:cout 关于c++-使用STL在Vector中定位,我们在StackOv

c++ - STL图表现?

我正在使用mapmap1;.显然,我的应用程序总时间的9%都花在了那里。特别是我的主要职能之一。map不是很大(是否有我可能想要使用的替代实现?我认为我不应该自己写,但如果我认为这是个好主意,我可以。附加信息:我总是在添加元素之前进行检查。如果存在key,我需要报告问题。之后,我将大量使用map进行查找,并且不会添加更多元素。 最佳答案 首先,您需要了解什么是map以及您正在执行的操作代表什么。std::map是平衡二叉树,查找将采用O(logN)操作,每个操作都是键的比较加上一些额外的操作在大多数情况下忽略(指针管理)。插入需要大

c++ - STL/Boost 相当于 LLVM SmallVector?

我一直在尝试查看在有许多小数据vector时是否可以优化案例。在我的用例中,这些vector可能有100,000多个,因此vector存储的大小至关重要。每个有时可能只有1或2个元素,但在许多情况下可能会增长更大的容量。我尝试过使用简单的std::vector,但这非常慢,因为它在堆上分配了N个小缓冲区,这会浪费内存并且在时间紧迫的环境中花费的时间太长。实际上,vector上的小缓冲区优化(SBO)似乎是一个可行的解决方案。这意味着使用vector的内部(即堆栈)数据,直到超过它,然后才需要使用堆。我偶然发现了LLVMSmallVector,它似乎正是这样做的。然而,它似乎在LLVM框

c++ - 堆栈和堆上的 STL 容器

如果std::vector和friend是self调整大小,这是否意味着如果我这样声明一个vector:std::vectormyvec;然后它将使用更多堆栈调整大小,而:std::vector*myvec=newstd::vector();会使用更多堆来调整大小吗? 最佳答案 vector在其内部的堆上分配。您在堆栈中为基于堆栈的bector支付的唯一费用是几个字节,内部缓冲区将始终从堆中分配。当您执行vec=newvector()时非常有效,您分配的数量很少,这可能不是很好。 关于c

c++ - 编写适合 STL 的 C++ 容器

我想以一种非常适合STL的风格编写一个容器类。它的外观和行为都应该像标准STL容器一样。是否有手册、报告、问答等描述如何使用这些功能编写代码?这样的文本应该损害STL的设计原则、陷阱、编码约定等。PS:这个问题的部分灵感来自于:C++vectorwithdynamicitemsize尽管这个想法与模板类无关。 最佳答案 这不是很困难(对于简单的数据结构)。您应该阅读C++标准中关于容器的章节。您可以在此处下载即将发布的C++1x标准草案:http://www.open-std.org/jtc1/sc22/wg21/docs/pape

c++ - STL 队列的线程安全

我正在使用队列在线程之间进行通信。我有一个读者和多个作家线程。我的问题是每次我从队列中为读者使用push/front/pop时是否需要锁定队列?我可以执行以下操作吗://readerthreadsgetLock();getthenumberofelementsfromthequeuereleaseLock();inti=0;while(i我的想法是我想减少锁定代码的粒度,因为写入线程只会写入队列的后面,并且只有一个读取线程。只要我得到元素的数量,那么我就可以从队列中获取元素或者我是否需要将front()和pop()包含在锁中也一样? 最佳答案