草庐IT

stl_algobase

全部标签

c++ - 将动态仿函数传递给 STL

我是C++的新手,这是我的第一篇文章,所以要温和;-)我了解如何传递函数指针或函数对象,就像许多STL函数所要求的那样。我不清楚如何将它与继承结合使用。具体来说,我想用几个从基本仿函数继承的仿函数来调用一个STL函数。我没有找到关于这个主题的任何相关评论或最佳实践。这是一个简化的代码片段:structgenerator{virtualintoperator()()=0;virtual~generator(){};};structA:publicgenerator{intoperator()();};structB:publicgenerator{intoperator()();};in

c++ - 查找无序元素的最佳 STL 数据结构

我目前正在尝试用C++实现一个哈希表作为家庭作业...我选择使用内部链接作为表格冲突的解决方案...我正在寻找一个好的STL容器,它可以在一组无序的数据中找到一个特定的条目。我不能使用基于树(集合、map、树等...)的STL容器现在我正在使用vector,这是一个不错的选择吗?搜索时间是线性的,对吧?还能更好吗? 最佳答案 正如您所说的我假设桶会变大...,最好使用std::list。在这两种情况下搜索都是线性的,但在std::list中添加元素是常量。我猜它们都是一样的,因为数据没有排序-不,它们不是。如果是的话,那就只有一个容

c++ - 检查不同 STL 链接的 C++ 库以跟踪 gcc/osx 上的 std::vector 析构函数崩溃?

所以我最近开始从事一个大型软件项目,该项目使用llvm-gcc编译器链接OSX上的几个静态和动态库。我在使用STL时遇到了严重的问题。具体来说,非常简单的代码会崩溃。例如,在我的主项目中,下面的代码会崩溃:{std::vectortestvec;testvec.resize(1);testvec[0]=0;}它会在退出范围时崩溃,在std::vector析构函数内部,抛出一个SIGABRT并表示正在释放的内存尚未分配。具体来说:malloc:***errorforobject0x135e8fc30:pointerbeingfreedwasnotallocated***setabreak

c++ - Doxygen STL 支持使用点图

我正在使用doxygen(xubuntu12.04机器上的版本1.8.0)记录遗留的c++/fortran混合代码。除了使用STLstd::vector类时,我的dot_graphs、调用图和调用图都正常工作。我有一些类foo需要包含另一个类bar的vector。classfoo{//Whati'dliketodo(1)std::vectord_bars//Whatworks(2)bar*d_bars};classbar{SOME_FUNCTION();}bar类包含各种函数,例如“SOME_FUNCTION()”。当foo类中的函数调用SOME_FUNCTION:d_bars[i].

c++ - 拆分 STL 列表?

我有一个循环链表,看起来像这样:4->3->2->5->0->1->开始我想把这个列表分成两段,反转其中一段,然后重新加入列表。像这样:拆分,一个O(1)操作4**3->2->5**0->1->开头反向,一个O(n)的操作0**3->2->5**4->1->开始重新加入,O(1)操作0->3->2->5->4->1->开头STL似乎没有循环链表,但我希望我可以将列表表示为(正向)列表。这需要:*一种将列表拆分为子列表的方法*一种将列表合并在一起的方法将子列表合并在一起应该很容易使用std::list::splice,它应该是一个O(1)操作。耶!但是,我找不到一个好的O(1)方法来将列

c++ - 在 KDevelop 中调试嵌套的 STL 容器

在KDevelop中,当我调试一个vector时,我可以看到它的内容。这是结果vectorv={1,2,3};但是调试一个vector>不显示它的内容。这是结果vector>v={{1,2,3},{4,5,6}};如何调试嵌套的STL容器? 最佳答案 这是aknownbuginKDevelop已在版本4.7.0中修复. 关于c++-在KDevelop中调试嵌套的STL容器,我们在StackOverflow上找到一个类似的问题: https://stackove

c++ - 迭代时从 STL 容器中查找并删除元素

在遍历multimap时我想删除元素,但不仅仅是迭代器指向的元素。for(vectormyVec:myVectors){autorange=myMultiMap.equal_range(myVector);for(autoit=range.first;it!=range.second;++it){//secondPairisanotherelementofthismultimapautosecondPair=getSecondPair(it,myMultiMap);if(condition){it=myMultiMap.erase(it);autofinder=myMultiMap.f

c++ - 在专用线程中清除 STL

在我的一个项目中,我确定了对std::deque::clear()的调用作为主要瓶颈。因此我决定将这个操作移到一个专用的低优先级线程中:templatevoidSomeClass::parallelClear(T&c){if(!c.empty()){T*temp=newT;c.swap(*temp);//swapcontents(fast)//deallocateonseparatethreadboost::threaddeleteThread([=](){deletetemp;});//Windowsspecific:lowerpriorityclassSetPriorityClas

c++ - 如何让 STL 抛出异常而不是断言?

我必须为一些写得不好的C++代码编写测试。问题是代码在许多情况下会导致STL断言/调试中断(通常是由愚蠢的错误引起的,例如超出字符串/vector范围的访问),这会导致测试终止。是否有可能使STL抛出异常(可以被捕获)而不只是崩溃?我必须将对原始代码的更改保持在绝对最低限度。感谢帮助 最佳答案 这绝对取决于您使用的STL。也就是说,这可能根本不可能。该标准定义了许多保证(尤其是C++0x的保证),并且函数是否抛出是这些保证的一部分。例如std::vector::operator[]不会扔。话虽这么说,可能会有很多技巧(用于调试的特定

c++ - 在哪里可以找到不同 STL 容器复杂性(性能)的比较?

这个问题在这里已经有了答案:Whatarethecomplexityguaranteesofthestandardcontainers?(3个答案)关闭9年前。我在谷歌上搜索了很长时间,以便找到一个比较,该比较显示了所有STL容器在插入/推送删除/弹出等方面的复杂性差异。我没有找到任何东西。也不在我所有的STL书籍中。有什么提示吗?我当然知道一些经验法则。但是定义在哪里呢?