我有几个指向自定义类的指针列表(类是具有基本数据的简单 Person)。如何将所有列表中的指针(浅拷贝)复制到一个新列表,但仅限来自波特兰(城市==波特兰)的人员?我正在使用 STL 中的列表(列表)。我不能使用 C++11。
class Person{
public:
long id;
string name;
string last_name;
string city
};
在 C++11 中,您应该使用copy_if
and 一个 lambda:
std::list<Person*> src, dst;
std::copy_if(src.cbegin(), src.cend(), std::back_inserter(dst),
[](Person * p) -> bool { return p->city == "Portland"; });
如果您有一个较旧的平台(没有 lambdas 或copy_if
),则必须手动拼写循环:
for (std::list<Person*>::const_iterator it = src.begin(), e = src.end(); it != e; ++it)
{
if ((*it)->city == "Portland") { dst.push_back(*it); }
}
For example in C++03.
struct PersonComparerByCity : public std::unary_function<Person*, bool>
{
PersonComparerByCity(const std::string& c):city(c) { }
result_type operator() (argument_type arg) const
{ return arg && arg->city == city; }
private:
std::string city;
};
std::list<Person*> p;
std::list<Person*> result;
std::remove_copy_if(p.begin(), p.end(), std::back_inserter(result),
std::not1(PersonComparerByCity("Portland")));
http://liveworkspace.org/code/a8e36e63b1f9924281768d90f7a090da