посмотреть несколько символов из cin с задержкой

Мне нужно попытаться посмотреть несколько символов из std::istream (что может быть std::cin), поэтому я написал простой цикл для вызова get() много раз, а затем putback() много времени:

std::vector<char> peek_many(std::istream& is, int N) {
std::vector<char> data;
data.reserve(N);

for (int i = 0; i < N; ++i) {
data.push_back(is.get());
}

for (int i = 0; i < N; ++i) {
is.putback(data[N-i-1]);
}

return data;
}

Это гарантированно сработает на всех istreams (читаю ли я файл, cin, istringstream, так далее)? Если нет, то почему нет?

2

Решение

putback звонки sputback который работает только при наличии позиции возврата. Ничто не гарантирует, что таких позиций будет неопределенное количество.

1

Другие решения

Можно с уверенностью предположить, что 1-символный «широкий» задний буфер помещен обратно. Вам нужно будет добавить дополнительный слой абстракции, чтобы обеспечить больше свободного пространства.

В качестве альтернативы, если ваш поток доступен для поиска, вы можете запомнить позицию, прежде чем начать предварительный анализ, а затем вернуться к запомненной позиции.

1

По вопросам рекламы [email protected]