0

我有几个指向自定义类的指针列表(类是具有基本数据的简单 Person)。如何将所有列表中的指针(浅拷贝)复制到一个新列表,但仅限来自波特兰(城市==波特兰)的人员?我正在使用 STL 中的列表(列表)。我不能使用 C++11。

class Person{
public:
long id;
string name;
string last_name;
string city

};
4

2 回答 2

2

在 C++11 中,您应该使用copy_ifand 一个 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); }
}
于 2012-09-06T09:04:29.563 回答
2

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

于 2012-09-06T09:07:07.227 回答