C++ 如何从std::vector转换<;浮动>;到std::istream?

C++ 如何从std::vector转换<;浮动>;到std::istream?,c++,istream,C++,Istream,我有一个std::vector,函数需要一个std::istream: callMe(std::istream& is) 转换的最佳方式是什么?还有比这更聪明的吗 std::stringstream sstr; for(int i = 0; i < myVector.size(); ++i) { sstr << myVector[i] << " "; } std::istringstream istr{sstr.str()};

我有一个std::vector,函数需要一个std::istream:

callMe(std::istream& is)
转换的最佳方式是什么?还有比这更聪明的吗

std::stringstream sstr;
for(int i = 0; i < myVector.size(); ++i) {
    sstr << myVector[i] << " ";
}
std::istringstream istr{sstr.str()};
callMe(istr);
std::stringstream sstr;
对于(int i=0;isstr问题在于
std::istream
本质上是基于字符的。如果您想继续使用
callMe(std::istream&is)
作为一个接口,您必须将
myVector
的每个元素转换为字符,并在某个时候返回。如果您想坚持使用此选项,我个人认为
ostream\u迭代器
是一个优雅的解决方案:

复制(开始(数据)、结束(数据)、std::ostream_迭代器(sstr));
完整示例:

void callMeStream(std::istream&is)
{
浮球f1;
is>>f1;

std::cout问题在于
std::istream
本质上是基于字符的。如果要继续使用
callMe(std::istream&is)
作为一个接口,您必须将
myVector
的每个元素转换为字符,并在某个时候返回。如果您想坚持使用此选项,我个人认为
ostream\u迭代器
是一个优雅的解决方案:

复制(开始(数据)、结束(数据)、std::ostream_迭代器(sstr));
完整示例:

void callMeStream(std::istream&is)
{
浮球f1;
is>>f1;

std::cout不应该是
std::istringstream istr{sstr.str()};
std::stringstream
std::isttream
。但是可能必须倒带流。
for(int i=0;i
是基于范围的好地方。
for(const auto val:myVector.size(){sstr如果不知道为什么
callMe()
需要一个
istream
开始,以及它如何实际读取
istream
中的值(格式化读取与二进制读取),就很难回答这个问题。将
向量
转换为
中包装的
字符串
(i)stringstream
可能工作正常,也可能工作不正常。我们需要有关
callMe()
实际需要输入的内容的更多详细信息,然后才能确定答案。您可能希望尝试修复它,以便在最后一个元素之后没有不必要的空间。@Remy Lebeau:
callMe()
使用运算符>>再次提取值,例如
浮点a0,a1,a2;is>>a0>>a1>>a2;
。但是,值的数量(a0,a1,…)可能会有所不同。不需要
std::istringstream istr{sstr.str()}
std::stringstream
std::istream
。不过,可能必须倒流。
for(int i=0;i
是一个基于范围的好地方。
for(const auto&val:myVector.size(){.sstr在不知道原因的情况下很难回答这个问题。
callMe()
首先需要一个
istream
,以及它实际上如何从该
istream
读取值(格式化读取与二进制读取)。将
向量
转换为
字符串
封装在
(i)stringstream
中可能会正常工作,也可能不会正常工作。我们需要更多关于
调用方法()
实际上需要输入,然后才能确定答案。您可能希望尝试修复它,以便在最后一个元素后没有不必要的空间。@Remy Lebeau:
callMe()
使用运算符>>再次提取值,例如
浮点a0,a1,a2;is>>a0>>a1>>a2;
。但是,值的数量(a0,a1,…)可能会有所不同。
std::stringstream sstr;
for(const float& val : myVector) {
    sstr << val << " ";
}
callMe(sstr);