gpt4 book ai didi

c++ - 我可以使用 std::copy 复制到 stringstream 中吗

转载 作者:太空狗 更新时间:2023-10-29 20:51:19 25 4
gpt4 key购买 nike

我最近有一个案例,我想将 int64_t 值的原始字节放入字符串流中。在 C++17 中,我可以执行以下操作:

uint64_t val = 1984;
std::stringstream sstr;
sstr << "the byte value is " << std::string_view(reinterpret_cast<char*>(&val), sizeof(decltype(val)));

鲍勃是你的叔叔。但我需要用 C++98 或 C++11 来完成。我想做以下事情:

std::copy(reinterpret_cast<const char*>(&tmp_time),
reinterpret_cast<const char*>(&tmp_time) + sizeof tmp_time,
std::back_inserter(sstr));

但是 g++ 在实例化 back_inserter 时提示 basic_stringstream 中没有名为 value_type 的类型。

我不能将 std::copy 复制到 stringstream 对象中吗?我该怎么做?请注意,上面是一个简单的示例,我不愿意放弃流式语义,因为它们在真实上下文中非常整洁。

最佳答案

您可以使用 std::ostream_iterator .

std::stringstream ss;
std::copy(reinterpret_cast<const char*>(&tmp_time),
reinterpret_cast<const char*>(&tmp_time) + sizeof tmp_time,
std::ostream_iterator<int>(ss, " "));

不过,您需要决定使用哪种类型。我正在使用 int 将值打印为带符号的整数,并使用一个空格作为分隔符。您可以根据您想要实现的目标选择其他内容。

使用 std::back_inserter 不适用于流,因为它的目的是在容器上操作。它创建 std::back_inserter_iterator,它在传递的容器上调用 push_back 成员函数。它还假定 Container 具有成员类型 value_typeconst_reference 和其他类型(您检查它们的使用方式 here )。

这里有一个示例:std::back_inserter 返回的迭代器具有如下定义的 operator=:

back_insert_iterator<Container> &operator=(typename Container::value_type &&value);

所以因为std::stringstream没有定义value_type,所以编译失败。

关于c++ - 我可以使用 std::copy 复制到 stringstream 中吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50642632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com