2013-02-01 93 views
0

我有Item(某个类)的名单,这个类的列表中有3个变量pricenamecountC++ |对象

我想知道如何删除所有他们的价格是320的项目。

+4

去通过清单,检查价格是否是320并删除它们? – Lieuwe

+0

我该怎么做?你能用代码告诉我吗? – user2033370

+1

看起来像“做我的功课”。请询问之前,查看此页:http://stackoverflow.com/questions/how-to-ask – JoaoHornburg

回答

4

如果使用std::list作为容器,使用std::list::remove_if;请参阅@wilx答案。


如果你不使用std::list,而是另一个容器,使用std::remove_if

#include <algorithm> 

list.erase(std::remove_if(list.begin(), list.end(), [] (Item const& i) { 
    return i.price == 320; 
}), list.end()); 
+2

,必须用在list.erase(标准::的remove_if(...),list.end()) –

+0

@Zoidberg:你应该也可以清除列表中的元素。这只会改变顺序,并使一些元素具有未指定的内容。 – wilx

+0

'list.begin()',而不是'begin(list)'? – Bill

8

这是怎么回事?

std::list<Item> l; 
//... 
l.remove_if ([] (Item const& i) { 
    return i.price == 320; 
}); 

看到该文档:

+0

+1,因为它比我的答案短1000多倍并且更具可读性。 :P – 2013-02-01 17:40:44

+0

非常感谢你;) – user2033370

+0

这是给我的“对象的类型是不与成员函数对象兼容的限定词是:常数项” – user2033370

1

万一你使用的是C++而不是C++ 11 - 它是这样的:

bool my_predicate (const Item& value) { return (value.price==320); } 

void foo() { 
    std::list<Item> l; 
    //... 
    l.remove_if (my_predicate); 
}