Вы можете создать класс, содержащий ваши данные (с перегрузками >>
и <<
)
include <iostream>
#include <iterator>
#include <vector>
class MyData
{
public:
friend
std::istream&
operator>>(std::istream& in, MyData& data)
{
in >> data.size ;
data.m_data.resize(data.size);
std::copy(
std::istream_iterator<float>(in),
std::istream_iterator<float>( ),
data.m_data.begin()
);
}
friend
std::ostream&
operator<<(std::ostream& out, MyData& data)
{
out<< data.size << " ";
for(size_t i=0;i<data.size;++i){
out<< data.m_data[i] <<" ";
}
return out;
}
private:
int size;
std::vector<float> m_data;
};
И затем вы можете называть его так:
int
main (int ac, char **av)
{
MyData d;
std::cin>>d; //input one set of data;
//test
std::cout<<d;
//get multiple data files
std::vector<MyData> buffer;
std::copy(
std::istream_iterator<MyData>(std::cin),
std::istream_iterator<MyData>( ),
std::back_inserter(buffer)); // copies all data into buffer
}
Вкл.В Linux тестовая труба может быть сформирована так:
echo "4 1.1 2.2 3.3 4.4" | ./a.out
Не знаю, как делать трубы в Windows, хотя ...