草庐IT

stl_algobase

全部标签

c++ - end() 可以是 STL 容器的 coSTLy 操作

开启https://doc-snapshots.qt.io/qtcreator-extending/coding-style.html建议编写如下for循环:Container::iteratorend=large.end();for(Container::iteratorit=large.begin();it!=end;++it){//...;}而不是for(Container::iteratorit=large.begin();it!=large.end();++it){//...;}由于我很少在任何代码中看到这种风格,我想知道end()的连续调用是否真的为STL容器上的大型循环增

c++ - 是否有 STL 算法来查找序列中值的最后一个实例?

使用STL,我想在一个序列中找到某个值的最后一个实例。此示例将在整数vector中找到0的第一个实例。#include#include#includetypedefstd::vectorintvec;intvecvalues;//...intsareaddedtovaluesintvec::const_iteratorsplit=std::find(values.begin(),values.end(),0);现在我可以使用split来处理子范围begin()..split和split..end()。我想做类似的事情,但将拆分设置为0的last实例。我的第一直觉是使用反向迭代器。int

c++ STL base() 做了什么

我有这样的代码:vectorv;for(inti=0;i此代码在第一次检测到2后从vectorv中删除第一个元素(在vector中剩余:0124)。.base()在这里做什么? 最佳答案 base()将反向迭代器转换为相应的正向迭代器。然而,尽管它很简单,但这种对应并不像一件可能的事情那么简单。当反向迭代器指向一个元素时,它会取消对前一个元素的引用,因此它物理上指向的元素和它逻辑上指向的元素是不同的。在下图中,i是正向迭代器,ri是由i构造的反向迭代器:i,*i|-01234-||*riri所以如果ri逻辑上指向元素2,它物理上指向

c++ - 具有 std::unique_ptr 与 boost::ptr_container 的 STL 容器

有了c++11,我问自己是否可以替换c++11中的boost::ptr_containers。我知道我可以使用例如一个std::vector>,但我不确定这是否是一个完整的替代品。处理这些情况的推荐方法是什么? 最佳答案 我决定编写一个简短的程序,将一些多态对象放入一个容器中(通过指向堆的指针),然后将该容器与std::algorithm一起使用。我选择了std::remove_if只是一个例子。这是我将如何使用vector>:#include#include#includeclassAnimal{public:Animal()=d

c++ - 从 STL 列表中删除项目

我想创建一个函数,如果它们符合特定条件,则将项目从一个STL列表移动到另一个。此代码不是执行此操作的方法。迭代器很可能会被erase()函数失效并导致问题:for(std::list::iteratorit=myList.begin();it!=myList.end();it++){if(myCondition(*it)){myOtherList.push_back(*it);myList.erase(it);}}那么任何人都可以提出更好的方法吗? 最佳答案 删除returnsaniterator指向删除后的元素:std::list

c++ - 在 Visual Studio 2012 中调试 C++ 代码时跳过 STL 代码?

在VisualStudio2012中使用C++调试器(native,x64)时是否可以跳过STL代码?在调试C++代码时,我经常会进入STL代码。我希望微软提供的STL代码是正确的——我对调试它不感兴趣——我只对调试我自己的(自己编写的)代码感兴趣。在此函数处设置断点时的instacne:foo(std::make_shared(6));其中foo定义为:voidfoo(std::shared_ptrx){//dosomething}我不想深入研究std::make_shared的细节——我想要的是直接进入函数foo。但这似乎是不可能的。如果foo(std::make_shared(6

c++ - 替换默认的 STL 分配器

我有一个大量使用STL容器和字符串的大型(>250个文件)库的源代码。我需要在有限堆的嵌入式环境中运行它,所以我想确保这个库本身的堆使用受到限制。显而易见的解决方案是创建一个分配器,但修改整个代码库以包含分配器模板参数是不得已而为之的一项大工作,如果我想要获取新版本的源代码,这也是不可取的。全局替换new和delete是不可行的,因为这会影响整个图像,而不仅仅是这个库。我的下一个想法是一个愚蠢的C宏技巧,但这似乎是不可能的,尽管我承认自己不是一个聪明的宏作者。所以我想“是否有编译器或编译指示开关在编译时指定分配器类”?但我愿意接受任何事情。如果有人能提出解决方案,我要问的下一个问题是,

c++ - XCode 中的 C/C++ 库和 STL C++ 库有什么区别?

我正在尝试在Xcode中创建C++库,但不确定是选择C/C++库还是STLC++库选项?我注意到STLC++Library选项不允许您创建静态库并强制您创建动态库。但是,C/C++库选项还允许您在创建静态库的同时创建动态库。这两个选项有什么区别,我应该什么时候使用它们?我阅读了选项下方的说明,但不幸的是它们并没有太大帮助。另一方面,为什么静态库文件与动态库文件完全不同?似乎区别主要在于如何找到库(与您的应用程序一起打包与依赖目标机器上的存在),而不是库本身的功能或代码。如果有人能澄清这一点,那就太好了。 最佳答案 静态链接库不能在运

c++ - 我可以在 STL 中禁用异常吗?

我想禁用在MSVC下编译的C++应用程序中的异常。我已将启用C++异常选项切换为NO,但我收到警告,告诉我使用选项/Ehsc,但我不想这样做。我的代码中没有try/catchblock,但我使用STL。我发现使用宏定义_HAS_EXCEPTIONS=0应该禁用STL中的异常,但我仍然收到如下警告:警告C4275:非dll接口(interface)类“stdext::exception”用作dll接口(interface)类“std::bad_typeid”的基础参见“stdext::exception”的声明见'std::bad_typeid'的声明有什么办法可以关闭异常是STL?注意

c++ - 如何在 C++ 中将转换应用于 STL 映射

在C++中,我使用转换将映射的所有值更改为大写。std::mapdata=getData();//makeallvaluesuppercasestd::transform(data.begin(),data.end(),data.begin(),[](std::pair&p){boost::to_upper(p.second);return(p);});这给了我以下编译错误:/opt/local/include/gcc46/c++/bits/stl_algo.h:4805:2:error:nomatchforcallto'(main(int,char**)::,std::basic_s