在精神here中有一个非常相似的问题。不幸的是,这个问题没有引起太多的回应 - 我想我会问一个更具体的问题,希望能够提出一种替代方法。如何迭代到更小的容器中(即步幅!= 1)
我正在写一个二进制文件到std::cin
(与tar --to-command=./myprog
)。 二进制文件碰巧是一组浮点数,我想将数据放入std::vector<float>
- 理想情况下是C++的方式。
我可以生成一个std::vector<char>
非常漂亮(感谢this answer)
#include <fstream>
#include <iostream>
#include <iterator>
#include <algorithm>
#include <vector>
int
main (int ac, char **av)
{
std::istream& input = std::cin;
std::vector<char> buffer;
std::copy(
std::istreambuf_iterator<char>(input),
std::istreambuf_iterator<char>(),
std::back_inserter(buffer)); // copies all data into buffer
}
我现在想我std::vector<char>
与std::transform
并执行转换(一个char[2]
到float
功能转变成一个std::vector<float>
,想必,说)。然而,我挣扎着,因为我的std::vector<float>
将有std::vector<char>
元素的一半。如果我可以迭代2次,那么我认为我会好起来的,但从前面的问题看来,我不能那样做(至少不是那么优雅)。
为什么要读'char'?为什么不'std :: string'的?目前还不清楚你想要输入什么,以及你想要完成什么。 – GManNickG 2011-03-24 19:01:19
@GMan,我想完成一个std :: vector从一个二进制文件输入到cin中 - 然后我可以使用库函数来解码std :: vector。如果通过叮咬进行治疗更容易,那很好(我不清楚如何用cin做到这一点)。 –
Tom
2011-03-24 19:06:06
@Tom:二进制文件的格式是什么? – GManNickG 2011-03-24 19:07:47