Tam*_* B. 3 c++ iterator stl stdvector
我有一个vector<Person>想要将每个对象的属性名称提取到a vector<string>.for-each循环使它正常工作,但有没有更好的方法来使用类似的东西std::copy()并告诉他使用特定的方法(在这种情况下是name()getter)将值复制到我的vector<string>?
class Person {
int a;
string n;
public:
Person(int age, string name) : a(age), n(name) {}
int age() const { return a; }
string name() const { return n; }
};
vector<Person> ppl = { Person(12, "Tim"), Person(21, "Tom") };
vector<string> names;
// question
// copy(ppl.begin(), ppl.end(), ????.name());
for (Person& p : ppl)
names.push_back(p.name());
copy(names.begin(), names.end(), ostream_iterator<string>(cout, ", "));
Run Code Online (Sandbox Code Playgroud)
如何std::transform使用std::back_inserter:
std::transform(std::begin(ppl), std::end(ppl),
std::back_inserter(names),
[](const Person& p) -> std::string { return p.name(); });
Run Code Online (Sandbox Code Playgroud)
最后,它仍然与你已经拥有的基本相同.