将向量的一部分转换为字符串的最简单方法是什么?
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()); // ^^^^^^^^^^^^^^^^^^^^^^^^^
我想将向量的一部分转换为字符串,我找到了这个
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()); // ^^^^^^^^^^^^^^^^^^^^^^^^^