首页 > 解决方案 > 如何从 C++ 中的两个字符串向量创建一个字符串?

问题描述

我有两个单独的字符串向量:

std::vector<std::string> vectorA;
vectorA.push_back("a1");
vectorA.push_back("\na2");

std::vector<std::string> vectorB;
vectorB.push_back("b1");
vectorB.push_back("b2");

我想创建一个std::string vectorOutput显示以下内容的内容:

a1 b1
a2 b2

现在,vector 中的元素A被定义在一个类中,而 vector 中的元素B来自另一个类,并在发生一些代码逻辑后被读取。矢量大小是相同的。我想知道在 C++ 中创建这个新vectorOutput字符串的最佳方法是什么?我正在考虑一个循环,它遍历每个向量的元素并将它们附加到vectorOutput,例如:

for (int i = 0; i < vectorA.size() < i++)
{
    vectorOutput += vectorA[i] + vectorB[i];
}

在我的代码中,这些向量的元素比这里提供的要多。还有另一种方法可以实现这一目标吗?也许通过创建枚举或结构?

标签: c++stringvector

解决方案


使用 range-v3 库,您可以这样编写:

namespace rs = ranges;
namespace rv = ranges::views;
    
auto outputVector = rv::transform(vectorA, vectorB, std::plus{}) 
                  | rv::cache1 
                  | rv::join 
                  | rs::to<std::string>;

这没有循环,并且非常可读。请注意,cache1需要确保返回的视图views::transform没有悬空。

这是一个演示


推荐阅读