Baz*_*Baz 3 c++ boost std c++98
struct Node
{
    std::string name;
    ...
};
typedef std::vector<Node> Nodes;
Nodes nodes;
std::vector<std::string> names;
对于节点中的每个项目,是否有一个很好的单行方式用Node :: name填充矢量名称?
这就是我目前所做的事情:
names.reserve(nodes.size());
BOOST_FOREACH(Node node, nodes) 
{
    names.push_back(node.name);
}
我正在使用C++ 98,std和boost.
对于更新的库(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,functor就可以了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绑定 - 小心,未经测试,我没有访问提升
std::transform(nodes.begin(), nodes.end(),
               std::back_inserter(names),
               boost::bind(&Node::name, _1));