【发布时间】:2021-04-12 14:36:48
【问题描述】:
我有一个 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;
for(const float& val : myVector) {
sstr << val << " ";
}
callMe(sstr);
【问题讨论】:
-
不应该需要
std::istringstream istr{sstr.str()};。std::stringstreamis-astd::istream。不过,可能不得不倒带。 -
for(int i = 0; i < myVector.size(); ++i)是一个基于范围的好地方。for(const auto & val: myVector.size() { sstr << val << " "; }也可以使用中的 for_each,但我认为不会更快或更清晰。 -
如果不知道为什么
callMe()以istream开头,以及它如何从istream实际读取值(格式化读取与二进制读取),真的很难回答这个问题。将vector转换为string包裹在(i)stringstream中可能会或可能不会正常工作。我们需要更多关于callMe()实际期望输入的详细信息,然后才能明确回答。 -
您可能想尝试修复它,以便在最后一个元素之后没有不必要的空间。
-
@Remy Lebeau:
callMe()使用运算符>>再次提取值,例如float a0, a1, a2; is >> a0 >> a1 >> a2;。但是,值的数量(a0、a1、...)可能会有所不同。