如何对每个元素执行转换并将结果附加到c ++中?

Joh*_*ock 6 c++ algorithm std c++11 c++17

我有一组整数{1,2}.我想生成"Transform#1,Transform#2",其中每个元素都被转换,然后结果用分隔符累积.

最简单的方法是什么?我们在c ++中有"折叠","地图"吗?

我们不使用提升.

And*_* DM 15

你可以使用std::transformstd::accumulate

int main()
{
  std::vector<int>         v1 {1,2,3};
  std::vector<std::string> v2;

  std::transform(begin(v1), end(v1), std::back_inserter(v2), [](auto const& i) {
    return std::string("Transform#") + std::to_string(i);
  });

  std::string s = std::accumulate(std::next(begin(v2)), end(v2), v2.at(0), [](auto const& a, auto const& b) {
    return a + ", " + b;
  });

  std::cout << s;
}
Run Code Online (Sandbox Code Playgroud)

版画 Transform#1, Transform#2, Transform#3


Dav*_*ank 7

您可能想要使用范围适配器.Boost已经拥有它们,并且它们正在达到C++ 20的标准.

看看这里boost::adaptors::transformed例子.另外,请查看参考,以更好地了解适配器支持的操作.

最后,您可以实现更清晰的代码,并且性能差异可以忽略不计(与其他语言不同,使用这种编程风格会导致高性能成本).