C++从函数调用的多个返回构建字符串 vector 的最佳方法

标签 c++ string c++11 vector lambda

我正在练习 C++,所以这不是将要投入生产的代码,但我非常想知道:

我有一个指向 Player 类型对象的指针 vector :

std::vector<Player*> _players;

当我调用它的方法 get_name() 时,每个玩家都将他的名字作为 std::string 返回给我,例如:

std::string player0_name = _players[0]->get_name();

我想将所有玩家名称传递给一个函数,该函数期望将它们作为对字符串 vector 的引用:

void all_player_names( std::vector< std::string >& );

现在我知道通过一些临时变量可以很容易地做到这一点。我可以先创建一个字符串 vector ,将所有玩家姓名存储在那里,然后将其传递给函数 all_player_names 作为引用。

但我正在寻找一种无需创建临时变量即可执行此操作的方法。它应该类似于 Python 中的列表理解。它必须遍历 Player 指针数组,对每个指针调用 get_name() 函数,从返回的字符串中构建一个 vector 并将其直接传递给函数 all_player_names。我假设它应该可以通过 lambda 函数和来自 STL 的一些算法实现,但我不知道是哪一个。

所以它应该看起来或多或少像这样:

all_player_names(<function that i'm looking for>(
    _players, [](Player* p) { return p->get_name();}
);

STL中有这样的算法吗?

最佳答案

最简单的方法是使用 accumulate 并使用将通过二进制操作传递并返回的临时变量:

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;
   });

由于移动语义,它在 C++11 中应该几乎没有性能开销。

关于C++从函数调用的多个返回构建字符串 vector 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19972929/

相关文章:

c++ - 如何重载 += 运算符以返回字符串?

c++ - 如何使用静态库(windows phone 8)

java - 如何在Java中读回一个字节?

python - 在 python 字符串替换中使用星号字符 (*) 作为 clown ?

Server 2008 r2环境中的Java StringIndexOutOfBounds异常

c++ - 如何根据计数器缩放值

c++ - Python 到 C++ : From Deriv, 到 Base,再到 Deriv

c++ - 如何在 C++ 中将 vector<int> 打印到终端

c++ - 如果我有一个 vector (或类似的东西)成员变量, move 构造函数会是什么样子?

c++ - 带有 is_enum 的 enable_if 不起作用