将向量的一部分转换为字符串的最简单方法是什么?

What the easiest way to convert part of a vector to string?

我想将向量的一部分转换为字符串,我找到了这个 std::string myString(Buffer.begin(), Buffer.end());(缓冲区为向量)

但是这里我转换了整个向量。如果我想跳过向量的前 5 个字符并转换其余字符,最简单的方法是什么?就像 ''.join(Buffer[5::]) 如果它是 python。

例如这样:

if (Buffer.size() >= 5) {
    std::string myString(
        Buffer.begin() + 5,
        Buffer.end());

一种更通用的方法,也适用于非随机访问迭代器(例如 std::list 的迭代器):

    std::string myString(
        std::next(Buffer.begin(), 5),
        Buffer.end());

或使用范围:

    auto subrange = Buffer | std::ranges::views::drop(5);
    std::string myString(
        std::ranges::begin(subrange),
        std::ranges::end(subrange));

只需将您的偏移量添加到 begin。由于 vector 具有随机访问迭代器,您可以只使用

std::string myString(Buffer.begin() + 5, Buffer.end());

如果您不确定您的容器使用的迭代器类型,您可以使用 std::next like

std::string myString(std::next(Buffer.begin(), 5), Buffer.end());

这将处理所有迭代器类型,它也可能是一个 O(N) 操作。

在执行此操作之前,您还需要确保容器的大小至少为 5,否则如果容器太小,将会出现未定义的行为。

一个安全的(避免越界访问),一般的方法可以是

std::string myString(std::next(Buffer.cbegin(), std::min(5, Buffer.size()),
                     Buffer.cend());  //        ^^^^^^^^^^^^^^^^^^^^^^^^^