草庐IT

stl_algobase

全部标签

c++ - STL-Like 范围,如果我这样做会出什么问题?

我正在编写(作为自学练习)一个简单的类STL范围。它是一个不可变的随机访问“容器”。我的范围,只保留它的起始元素,元素个数和步长(两个连续元素的差值):structrange{...private:value_typem_first_element,m_element_count,m_step;};因为我的范围不包含元素,所以它使用以下方法计算所需的元素://Inthestandards,theoperator[]//shouldreturnaconstreference.//BecauseRangedoesn'tstoreitselements//internally,weretur

c++ - OpenCV、Matlab 和 STL 容器

最新版本的OpenCV中的许多函数都需要使用STL容器。尝试在MatlabMEX文件中使用它们时遇到问题。我正在从Matlab中编译MEX文件。OpenCV和Matlab都使用“/MD”标志,即“多线程DLL”来生成代码。编译器:MSVC++9.0Matlab2010a来自SVN的最新OpenCV,我认为是2.11。我使用的代码非常简单:vectorkeypoints_vec;SurfFeatureDetectorsurf;surf.detect(cvImg,keypoints_vec);这可以编译,但在MatlabMEX文件中运行时会崩溃。崩溃发生在OpenCV中的vector::r

c++ - 是否有用于 C(C99 或其他)的标准化和常用库,因为 STL 用于 C++?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:ContainerClass/LibraryforC我预计我会被迫在我的C程序中使用vector、列表和集合。我应该从头开始发明这些实体,还是有某种C的标准库,就像C++的STL一样?

c++ - 具有三向比较谓词的 STL 函数

有没有像std::sort()这样的带有STL函数的库?,std::binary_search(),std::lower_bound(),std::upper_bound()接受3向比较谓词(更少返回-1,等于0,伟大返回1)而不是更少谓词(更少为真,等于或伟大为假)?当然,less谓词可以很容易地从现有的3向谓词(如[](Aa,Bb){returncompare3(a,b))中找出来,但这会导致对谓词的额外调用次数。 最佳答案 如果你看一下上述算法的实现,你会发现lower/upper_bound根本不做3向分支,binary_s

c++ - 当键是对象的一部分时最合适的关联 STL 容器 [C++]

我有这样一个类:structThing{unsignedindex;//moredatamembers};我正在使用std::map包含我的Thing秒。调用代码看起来像这样:ThingmyThing(/*...*/);std::mapthings;things[myThing.index]=myThing;//...Thing&thing3=things[3];我想知道是否有一种方法可以使用Thing::index直接无需隐式复制到pair::first.我想我需要提供某种Thing比较运算符,但没关系。std::set可能有用,但我需要一个完整的Thing对象作为键:std::se

c++ - 修改对内部数据的引用时更新 STL 优先级队列

假设我正在写Dijkstra'sAlgorithm,我有一个优先级队列,将最短距离节点保持在顶部。但是,当我遍历图形时,我将更新到该顶点的距离。我已经放置了对数据结构中包含的优先级队列中所有顶点的引用。现在,当我更新数据结构中的顶点时,我希望优先级队列中的数据能够适应这些变化,因此最近的节点总是在最前面。但是,在使用调试器单步执行我的应用程序后,我注意到优先级队列不会自行更新。我如何让它做到这一点,而不将所有顶点重新插入其中? 最佳答案 STLpriority_queue假设你只使用push()和pop()方法来修改数据结构。它不跟

没有STL的C++动态数组

这是作业的一部分,但我只是要求澄清:LoaddatafromATM.txtandstoretheminadynamicarray(ATMtype,notSTL)whentheprogramstartsup.在没有STL的情况下,我该如何做动态数组?我想也许赋值意味着使用指针,“ATM类型”让我失望了。又提到了:fileaccounts.txtintoadynamicarray(Accounttype,notSTL)--不是作业的一部分我一直不明白内存不安全操作的使用,例如从第一行提取文件中的项目数:例如。5abcdefhijkmlmno使用STL(vector或C++11数组)而不依赖

c++ - 等效范围的 STL 算法

根据定义,std::equal算法仅采用一个“最后”迭代器。stackoverflow上的许多帖子表明,要在两个范围之间执行等价,除了调用std::equal之外,还必须首先检查范围是否具有相同的大小。如果随机访问迭代器可用,这不会增加任何Material开销。但是,似乎没有随机访问迭代器,第一个代码片段(仅使用现有的STL算法实现)将比第二个代码片段慢,第二个代码片段表示自定义的“等效”算法(不是STL的一部分)。我的问题是,片段2是否比任何仅使用现有STL算法编码的算法更有效?如果是,为什么这个算法不是STL的一部分?片段1:templateboolequivalent(IITR1

c++ - 为什么这些 C++ STL 无序集不被视为相等?

我希望下面的两个无序集合被评估为等价的,但令我惊讶的是它们不是。发生这种情况是因为这两个字符串存储在同一个哈希桶中,并且运算符==对集合中的项目进行顺序比较。这应该被认为是std::unordered_set中的错误吗?有人对此有优雅的解决方法吗?std::unordered_seta,b;a.insert("500666");a.insert("961021");b.insert("961021");b.insert("500666");if(a==b)//conditionisevaulatedasfalse{} 最佳答案 这是

c++ - 使用 Xcode 4.5 调试 c++ 时,单步执行代码会停止在 STL 代码上

我尝试用Xcode4.5调试C++代码,用llvm4.1编译。代码非常简单,只是将几个项目插入到map中。当我跨过STL函数时,执行在STL代码内部停止,而不是像往常一样执行该步骤。当我使用LLVM-GCC4.2进行编译时,调试正常,但此编译器不支持C++11。有没有人遇到过这个问题,知道能不能解决? 最佳答案 自从LLDB被引入Xcode以来,我肯定会遇到同样的问题。它似乎没有正确处理跨内联函数(参见:DebuggerstepsdeeperwhentryingtostepoutofC++11stdlib)。我刚刚向Apple(ID