Один вариант - использовать контейнер, например,
std::vector<char> data;
и перенаправляют все входные данные в эту коллекцию до получения EOF
, т.е.
std::copy(std::istream_iterator<char>(std::cin),
std::istream_iterator<char>(),
std::back_inserter(data));
Однако используемому контейнеру может потребоваться слишком часто перераспределять память, иначе вы получите исключение std::bad_alloc
, когда вашей системе не хватит памяти. Чтобы решить эти проблемы, вы можете зарезервировать фиксированное количество N
элементов и обработать это количество элементов изолированно, т.е.
data.reserve(N);
while (/*some condition is met*/)
{
std::copy_n(std::istream_iterator<char>(std::cin),
N,
std::back_inserter(data));
/* process data */
data.clear();
}