我有幾個指向自定義類的指針列表(類是簡單的人與基本數據)。 如何將指針(淺拷貝)從所有列表複製到一個新列表中,但只有來自波特蘭(城市==波特蘭)的人員?我正在使用STL列表(列表)。我無法使用C++ 11。如何複製一個stl列表中的一個,但只有一些屬性
class Person{
public:
long id;
string name;
string last_name;
string city
};
我有幾個指向自定義類的指針列表(類是簡單的人與基本數據)。 如何將指針(淺拷貝)從所有列表複製到一個新列表中,但只有來自波特蘭(城市==波特蘭)的人員?我正在使用STL列表(列表)。我無法使用C++ 11。如何複製一個stl列表中的一個,但只有一些屬性
class Person{
public:
long id;
string name;
string last_name;
string city
};
在C++ 11,你應該使用copy_if
和拉姆達:
std::list<Person*> src, dst;
std::copy_if(src.cbegin(), src.cend(), std::back_inserter(dst),
[](Person * p) -> bool { return p->city == "Portland"; });
如果你有一箇舊的平臺(不具有lambda表達式或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); }
}
例如在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
「我不能使用C++ 11」 :( –