You can do without cycles (explicit) and unnecessary variables:
#include <algorithm> #include <iostream> #include <iterator> #include <vector> int main() { std::vector<int> v; std::copy(std::istream_iterator<int>(std::cin), {}, std::back_inserter(v)); std::copy(std::begin(v), std::end(v), std::ostream_iterator<int>(std::cout, " ")); }
Check result
To get the count of rows and columns, you can read line by line:
#include <algorithm> #include <iostream> #include <iterator> #include <sstream> #include <vector> int main() { std::vector<int> v; std::string s; int lines = 0; while(std::getline(std::cin, s)) { std::istringstream ss{s}; std::copy(std::istream_iterator<int>{ss}, {}, std::back_inserter(v)); ++lines; } std::copy(std::begin(v), std::end(v), std::ostream_iterator<int>(std::cout, " ")); std::cout << "\nlines=" << lines << " rows=" << v.size() / lines << "\n"; }
Check result
And it would be possible to go down character-by-character reading. Parse a numeric string for spaces and newlines. But I'm not ready for it :)