请告诉我如何使用STL做到最好。
我的班级有成员std::list<SomeObject*>
。这是私人会员。我只有const_iterator
开始和结束。
我想检查列表是否有一些价值。我需要检查几个值。我可以访问SomeObject的成员。 如何做到最好?
我想使用std::find
或std::any_of
或者像那样。但我不想定义几个谓词函数。
列表有指针,所以我无法定义operator==
。
我可以使用C ++ 11。
答案 0 :(得分:1)
你需要更具体一点。一种方法是使用传递给find函数的函数,该函数包含成功返回的策略。类似的东西:
//You could also use a public member function of the Test class that provides the policy
bool my_find_function( const Test* item )
{
return item->id == 10;
}
list<Test*>::const_iterator found = find_if( list.begin(), list.end(), my_find_function);
但老实说,网上有很多STL容器的例子,我很确定,Stackoverflow上有很多结果。检查本页右上角的搜索功能。
答案 1 :(得分:0)
如果您不想在解除引用的对象上为std :: find和call = =提供谓词,则可以使用迭代器适配器自动取消引用指针。 Boost有一个这样的迭代器的实现,但是编写自己的并且有一个很方便。
#include <boost/iterator/indirect_iterator.hpp>
bool finder(std::list<SomeObject*>::const_iterator fist,
std::list<SomeObject*>::const_iterator last,
SomeObject const& x)
{
return std::find(boost::make_indirect_iterator(first),
boost::make_indirect_iterator(last),
x) != last;
}
但是这只在你想使用operator ==时才有意义。如果你有不同的谓词,要么将它们定义为函数,要么在本地将它们定义为lambda函数。