我需要尝试从std::istream
(可能是std::cin
)中查找多个字符,所以我编写了一个简单的循环来多次调用get()
然后{{1很多次:
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
,cin
等)?如果没有,为什么不呢?
答案 0 :(得分:1)
putback
调用sputback
只有在回拨位置可用时才会有效。没有什么能保证有无限数量的此类职位。
答案 1 :(得分:1)
假设1个字符“宽”放回缓冲区是安全的。您将不得不添加额外的抽象层以提供更多的回放空间。
或者,如果您的信息流是可搜索的,您可以在开始尝试解析之前记住该位置,然后再回到记住的位置。