对于较新的库(boost)和/或标准(C++11),这要简单得多,但您应该能够编写一个小仿函数:
struct ReadNodeName {
std::string const & operator()(Node const & node) const {
return node.name;
}
};
然后使用std::transform
std::transform(nodes.begin(), nodes.end(),
std::back_inserter(names),
ReadNodeName());
使用 boost,仿函数可以是 just boost::bind
,在 C++11 中你可以使用 lambda: [](Node const & node) { return node.name; };
,在 C++14 中可以使用更短的 lambda [](auto& n) { return n.name; }
:
std::transform(nodes.begin(), nodes.end(),
std::back_inserter(names),
[](auto & n){return n.name;});
使用 boost 绑定——当心,未经测试,我无权使用 boost
std::transform(nodes.begin(), nodes.end(),
std::back_inserter(names),
boost::bind(&Node::name, _1));