草庐IT

remove-erase

全部标签

c++ - 相当于 D 中的 remove_if

最近对D语言产生了兴趣。我刚开始学习它,并且来自C++背景。我想知道是否有std::remove_if的等价物。我只在dlang网站上看到删除查看文档。如果没有直接等价物,在D中实现相同结果的正确或最惯用的方法是什么?编辑:我应该补充一点,我是在erase-remove的背景下思考的 最佳答案 有std.algortihm.remove(pred,Range)(Range)(往页面下方看一点)它会按照您的要求进行操作 关于c++-相当于D中的remove_if,我们在StackOverf

c++ - 没有匹配的成员函数调用 'erase'

这是导致错误的代码:工厂.h:#include#includenamespaceBaseSubsystems{templateclassCFactory{protected:typedefT(*FunctionPointer)();typedefstd::pairTStringFunctionPointerPair;typedefstd::mapTFunctionPointerMap;TFunctionPointerMap_table;public:CFactory(){}virtual~CFactory();};//classCFactorytemplateinlineCFactor

c++ - 使用 remove_if 按索引从 C++ vector 中删除

我们可以在C++中使用remove_if,根据对元素进行操作的谓词,在线性时间内从vector中删除元素。boolcondition(doubled){...}vectordata=...std::remove_if(data.begin(),data.end(),condition);如果我的条件不取决于值,而是取决于指数怎么办?换句话说,如果我想删除所有奇数索引元素,或一些任意索引集等?boolcondition(intindex){//returnswhetherthisindexshouldberemoved}vectordata=...std::remove_if(data.

c++ - 使用 std::remove 删除指针元素

我正在努力remove(pvec.begin(),pvec.end(),NULL);删除vector中的NULL指针(其中pvec是vector)但是,编译器给出:“ISOC++禁止比较指针和整数”如何解决?谢谢! 最佳答案 在C++11中,使用nullptr:remove(pvec.begin(),pvec.end(),nullptr);//^^^^^^^否则,执行对指针值的显式转换。如果你的pvec包含类型为foo*的指针,写:remove(pvec.begin(),pvec.end(),static_cast(NULL));/

c++ - 为什么 Vector 不提供 remove() 成员函数而 list 提供?

如果我想从vector中删除所有具有值的元素,我调用removealgorithm然后调用vector的erase成员函数来物理删除它。但在list的情况下,简单调用remove成员函数,它将删除具有该值的所有元素。我不确定为什么vector不提供removeMF而list提供。对于Exp:我想从vectorv中删除值“4”。vectorv;vector::iteratorItr;for(inti=0;i对于列表:list.remove(4);//willdeletealltheelementwhichhasvalue4 最佳答案

c++ - 在整个范围内使用 vector::erase

是v.erase(v.begin(),v.end());一样快v.clear();?我不关心额外的函数调用等小开销,编译器会内联那些东西。我问的原因是因为我有如下代码:v.erase(v.begin(),last_it);last_it通常是结束迭代器,但并非总是如此。我知道不从末尾删除vector是有代价的,因为vector中后面的元素需要向下复制。如果last_it不是结束迭代器(很少见),我可以接受。但是当我基本上想清除vector时,我不想引入这样的开销。所以我考虑这样写我的代码:if(last_it==v.end()){v.clear();}else{v.erase(v.be

c++ - std::unordered_map<std::String, myClass*> - std::unordered_map::erase() 是否调用 myClass 的 DTor?

假设我有一些unordered_map指向类实例的指针,从该映射中删除一个对象是否也会删除该实例?(改写问题:)如果我想删除那个实例,哪个版本是正确的?if(it!=map.end()){deleteit->second;map.erase(it);}或者只是if(it!=map.end())map.erase(it);?更新:根据很多人的建议,我转而使用shared_ptr,效果很好! 最佳答案 不,因为这是标记的C++11,你应该首先使用std::unique_ptr/std::shared_ptr来管理你的对象指针,例如std

C++11/14 : How to remove a pointer-to-member from a type?

在C++11或C++1y/14中:给定一个TC::*形式的指向成员类型的值,我想得到指向类型例如:#includeusingnamespacestd;structT1{staticvoidf(){coutstructV;templatestructV{staticconstexprT1U1::*pm=&U1::x;};templatestructV{staticconstexprT2U2::*pm=&U2::x;};templatevoidf(Wpm){typedef???T;T::f();}intmain(){f(V::pm);f(V::pm);}有没有办法做到这一点?上面的???是

c++ - std::remove_if 来自 std::vector 的多态 std::unique_ptr

我有一个包含三个类的层次结构,其中Derived源自Selectable和Drawable.然后我有一个std::vector的std::unique_ptr我用Derived填充对象。我确定该vector将仅由同时从两个基派生的对象填充。当我尝试使用指向Selected的指针从vector中删除某个元素时,问题就来了.#include#include#includestructSelectable{virtual~Selectable()=0;};Selectable::~Selectable()=default;structDrawable{virtual~Drawable()=0

c++ - 为什么 mySet.erase(it++) 不是未定义的行为,或者是吗?

协议(protocol)tothisquitehighlyupvotedanswer,遍历集合并删除一些元素的规范方法如下:for(it=mySet.begin();it!=mySet.end();){if(conditionToDelete(*it)){mySet.erase(it++);}else{++it;}}当然,这是C++03的seterase没有返回迭代器的结果。否则可以这样写it=mySet.erase(it);显然也可以这样写itToDelete=it++;mySet.erase(itToDelete);这个问题不是关于如何在迭代时删除元素。问题是为什么下面这行显然不会