草庐IT

stl-algorithm

全部标签

c++ - 如何将 std::unique_ptr<> 从一个 STL 容器移动到另一个?

问题我有一个模板容器MyContainer>它有一个std::deque和一个std::vector成员(member)。内部方法,send_to_purgatory_if(predicate),我想查看m_taskdq中的所有项目并从m_taskdq移动项目至m_purgatory,如果谓词的计算结果为真。问题我有两个问题正在努力解决:我的迭代器it如果我从循环内从m_taskdq中删除项目,则会被丢弃我很担心std::unique_ptr的状态如果我分两步进行移动(问题第1行和第2行-通过第2行,我认为std::unique_ptr指向的it未定义?)我应该如何修复此代码?temp

c++ - 如何检查 C++ STL vector 中存在的值并将函数应用于 vector 的每个元素?

我有两个问题与C++标准库的vector类有关。如何检查vector中是否已经存在一个值(假设是一个整数)?我想要的文字如下:“如果整数已经存在于vector中,则下一个,否则将其添加到vector的末尾。”如何应用一个包含参数的函数到vector中的每个元素?(看来我不能用for_each做到这一点)换句话说:“对vector中的每个z元素应用MyAddFn(i,j)”...或者也许我没有在STLvector序列容器的正确轨道上,我应该定义我自己的迭代器? 最佳答案 1)std::find(v.begin(),v.end(),5)

c++ - 如何用STL编写仿函数?

在STL中,以下是可能的:intcount=count_if(v.begin(),v.end(),bind2nd(less(),3));这将返回v中小于3的元素数。如何编写一个返回0到3之间元素数的仿函数?我知道boost对此有一些设施,但在纯STL中是否可行? 最佳答案 如果您的意思是使用标准库的仿函数组合工具,那么不会,至少在C++98中不会。在C++11中,您可以使用std::bind来任意组合仿函数:usingstd::placeholders;intcount=std::count_if(v.begin(),v.end()

c++ - 重新定义 < 运算符以在字符串的 STL 算法中使用

是否可以重新定义operator对于不修改std命名空间的字符串,让这个运算符在标准算法中使用?例如,我可以这样写:namespacestd{booloperatorlol={"a","b","ba","aa"};std::sort(lol.begin(),lol.end());}和“lol”将被打印多次。但是如果我移动operator在std命名空间之外,默认为operator将被使用并且不会打印任何内容。是否可以制作std::sort使用自定义operator不将其包含到std命名空间?是的,我知道,我可以将另一个比较器传递给std::sort但如果我能按照我的要求做以及如何做,这

c++ - 为什么包含任意 STL header 可以解决这些编译错误?

我的程序中有这个全局函数:staticboolIsValidType(constCString&cType){for(autopType:{"bmp","jpg","jpeg","gif","tif","tiff","png"})if(cType==CString(pType))returntrue;returnfalse;}它给了我以下编译错误:errorC3312:nocallable'begin'functionfoundfortype'initializer-list'errorC3312:nocallable'end'functionfoundfortype'initiali

c++ - 实例化一个新的 STL vector

我有一个指向STL的指针vector。很喜欢vector*myvector;我必须在构造函数中将此指针设置为NULL,然后在触及该属性时延迟加载。如何将其实例化为vector的新实例? 最佳答案 假设您正确定义了vector:vector*myvector;//Notevectormustbeparametrizedwithatype.//Thereisnosuchthingasaanakedvector.初始化为NULLmyclass::myclass():myvector(NULL)//Youcanuse0herebutIsti

c++ - STL vector 分配与插入

我理解这两个操作的语义,在替换为提供的值之前分配-删除。insert-在指定位置插入值(必要时分配新内存)。除此之外,还有什么理由比另一个更受欢迎?或者换句话说,有什么理由使用赋值而不是插入。 最佳答案 assign和insert仅当vector开始时​​为空时才等效。如果vector已经为空,那么最好使用assign,因为insert会错误地向读者暗示存在要保留的现有元素。 关于c++-STLvector分配与插入,我们在StackOverflow上找到一个类似的问题:

c++ - STL算法全部还是任意函数?

作为STL的一部分,是否有任何近似于Haskell的所有或任何函数的东西?如果不是,下面是一个很好的实现吗(我注意到如果迭代器是随机访问,sgiSTL会执行部分特化,尽管我没有为此烦恼)?templateinlineboolall(InputIteratorfirst,InputIteratorlast,Predicatepred){while(first!=last){if(!pred(*first)){returnfalse;}++first;}returntrue;}同样,如何最好地将其转换为迭代两个序列,并在BinaryPredicate对所有序列返回true的情况下返回tru

c++ - 对于以下情况,STL map 或 unordered_map 哪个更好

我正在尝试比较某些操作的STLmap和STLunordered_map。我在网上查看,这只会增加我对整体上哪个更好的怀疑。所以我想根据它们执行的操作来比较两者。哪个表现更快插入、删除、查找哪一个占用更少的内存和更少的时间从内存中清除它。任何解释都热烈欢迎!!!提前致谢 最佳答案 WhichoneperformsfasterinInsert,Delete,Look-up?Whichonetakeslessmemoryandlesstimetoclearitfromthememory.Anyexplanationsareheartily

c++ - 通过常量迭代器从 STL 容器中删除

根据C++referenceSTL容器已在C++11标准中修复,以在erase方法中采用常量迭代器。以下代码无法在启用c++0x的g++4.7中编译。#includeintmain(){std::vectorvector;vector.push_back(0);std::vector::const_iteratorvectorItr=vector.begin();vector.erase(vectorItr);}显然新的签名没有实现。有没有什么时候解决这个问题的信息?我在C++0x/C++11SupportinGCC中找不到任何相关信息文章。 最佳答案