мне нужно, чтобы попытаться заглянуть несколько символов из std::istream
(который может быть std::cin
), так что я написал простой цикл, чтобы позвонить get()
много раз, а затем putback()
много раз:PEEK несколько символов из CIN с 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;
}
Гарантировано, что оно будет работать на всех istream
s (независимо от того, читаю ли я файл, cin
, istringstream
и т. Д.)? Если нет, почему бы и нет?
'std :: istringstream' вводится только, его можно читать только, вы не можете в него вставлять' putback() 'данные. –
Отключить тему, не лучше ли было бы вернуть более короткий вектор, если бы было достигнуто 'EOF', вместо того, чтобы возвращать вектор с завершающим' EOF '? – LogicStuff
@Remy Требуется ссылка –