【发布时间】:2013-11-14 08:34:43
【问题描述】:
我正在练习 C++,所以这不是将要投入生产的代码,但我很想知道:
我有一个指向 Player 类型对象的指针向量:
std::vector<Player*> _players;
当我调用它的方法get_name() 时,每个玩家都将他的名字返回给我std::string,例如:
std::string player0_name = _players[0]->get_name();
我想将所有玩家名称传递给一个函数,该函数期望它们作为字符串向量的引用:
void all_player_names( std::vector< std::string >& );
现在我知道通过一些临时变量很容易做到这一点。我可以先创建一个字符串向量,在其中存储所有玩家姓名,然后将其传递给函数all_player_names 作为参考。
但我正在寻找一种无需创建临时变量的方法。它应该类似于 Python 中的列表推导。它必须遍历Player 指针数组,在每个指针上调用get_name() 函数,从返回的字符串中构建一个向量并将其直接传递给函数all_player_names。我假设它应该可以使用 lambda 函数和 STL 中的一些算法,但我不知道是哪一个。
所以它看起来或多或少应该是这样的:
all_player_names(<function that i'm looking for>(
_players, [](Player* p) { return p->get_name();}
);
STL中有这样的算法吗?
【问题讨论】:
-
从返回的字符串中构建一个向量 ... 是一个临时变量,不是一个理解.列表推导更像是一个迭代器对,其中取消引用迭代器会动态生成值
-
老实说,看看下面的答案,我更喜欢 for 循环。我的意思是,它仍然没有接近
var names = players.Select(p => p.Name):-)
标签: c++ string c++11 vector lambda