2012-09-06 25 views
0

我有幾個指向自定義類的指針列表(類是簡單的人與基本數據)。 如何將指針(淺拷貝)從所有列表複製到一個新列表中,但只有來自波特蘭(城市==波特蘭)的人員?我正在使用STL列表(列表)。我無法使用C++ 11。如何複製一個stl列表中的一個,但只有一些屬性

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

}; 

回答

2

在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); } 
} 
+2

「我不能使用C++ 11」 :( –

2

例如在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

相關問題