#include <iostream>
#include <vector>
#include <iterator>
std::vector<int> ints;
std::copy(std::istream_iterator<int>(cin),
std::istream_iterator<int>(),
std::back_inserter(ints));
Готово. Если вам действительно нужно точно прочитать построчно:
#include <sstream>
#include <iostream>
#include <vector>
#include <iterator>
std::string singleline;
std::istringstream iss; // out of loop for performance
while (std::getline(cin, singleline))
{
iss.str(singleline);
std::copy(std::istream_iterator<int>(iss),
std::istream_iterator<int>(),
std::back_inserter(ints));
}
istream_iterator<int>
будет повторно применять operator>>(int&)
к указанному потоку (до конца потока). По умолчанию это автоматически игнорирует пробелы и выдает исключение, если операция ввода завершилась неудачно (например, встречается нецелочисленный ввод)
Back_inserter - это выходной итератор , который вы можете использовать со всеми типами контейнеров (например, vector
), которые поддерживают операцию .push_back
. Так что на самом деле то, что там написано в алгоритме STL, похоже на
std::vector<int> ints;
while (iss>>myint)
{
ints.push_back(myint);
}