You can create a class containing your data (with overloads >> and << )
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; };
And then you can call him that
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 }
On Linux, a test tube can be formed as follows:
echo "4 1.1 2.2 3.3 4.4" | ./a.out
Not sure how to make pipes in windows though ...
source share