c++ - 连接一个字符串家族

标签 c++ string string-concatenation

我想编写一个函数,将 std::string 的任何序列与幕后的 一个 malloc 连接起来。因此,需要首先计算字符串的总长度。该函数需要以这种方式使用:

std::string s0 = ...;
std::string s1 = ...;
std::string s2 = ...;

std::string s = join(s0, s1, s2);

更好的 join 会混合使用 std::stringstd::string_view。如果我们可以添加字符串文字会更好。您将如何在 C++11 中编写这样的函数(它需要使用 gcc 4.8.5Visual Studio 2015 进行编译)?

最佳答案

如果你有一个 string_view 类型,那么你可以只接受一个 string_view 的集合,对它们的大小求和,分配,然后复制进来。

std::string join(std::initializer_list<string_view> values)
{
    std::string result;
    result.reserve(std::accumulate(values.begin(), values.end(), 0, [](string_view s) { return s.length(); }));
    std::for_each(values.begin(), values.end(), [&result](string_view s) { result.append(s.data()); });
    return result;
}

关于c++ - 连接一个字符串家族,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45876498/

相关文章:

c++ - 如何包装 posix_memalign(在 mac 上编译旧代码库)?

c++ - 特定时间的 wxwidgets 事件

c# - 将 C# 3D 数组作为 1D 字节数组传递给 C++ 库

java - 使用动态字符串工作函数?

.net - StringBuilder 或 +=

python - 在两列上分组并使用 pandas - Python 在特定列上应用转换(分区)、滚动和连接

c++ - 链接器错误( undefined reference )与 `static constexpr const char*` 和完美转发

javascript - 如何突出显示任意数量的(可能重复的)A,后跟非贪婪匹配器,然后是任意数量的 B 等(没有不合理的限制)?

java - 翻译器只接受一个词,为什么不接受其余的

SQL NVARCHAR 和 VARCHAR 限制