rep*_*lay 4 c++ string lambda vector c++11
我正在练习C++,所以这不是将要投入生产的代码,但我很想知道:
我有一个指向类型对象的指针向量Player:
std::vector<Player*> _players;
Run Code Online (Sandbox Code Playgroud)
std::string当我称之为方法时get_name(),每个玩家都会返回他的名字,例如:
std::string player0_name = _players[0]->get_name();
Run Code Online (Sandbox Code Playgroud)
我想将所有玩家名称传递给一个函数,该函数期望它们作为字符串向量的引用:
void all_player_names( std::vector< std::string >& );
Run Code Online (Sandbox Code Playgroud)
现在我知道通过一些临时变量很容易做到这一点.我可以先创建一个字符串向量,在那里存储所有玩家名称,然后将其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();}
);
Run Code Online (Sandbox Code Playgroud)
STL中有这样的算法吗?
最简单的方法是使用accumulate并使用一个临时变量,该变量将通过二进制op传递并返回:
std::accumulate(_players.begin(), _players.end(),
std::vector<std::string>(),
[](std::vector<std::string>& vector, const Player* elem)
{
vector.push_back(elem->get_name());
return vector;
});
Run Code Online (Sandbox Code Playgroud)
由于移动语义,它在C++ 11中几乎没有性能开销.
| 归档时间: |
|
| 查看次数: |
861 次 |
| 最近记录: |