通过回扣从cin偷看多个chars

时间:2016-05-04 20:54:47

标签: c++ istream peek

我需要尝试从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; } (无论我是在阅读文件,istreamcin等)?如果没有,为什么不呢?

2 个答案:

答案 0 :(得分:1)

putback调用sputback只有在回拨位置可用时才会有效。没有什么能保证有无限数量的此类职位。

答案 1 :(得分:1)

假设1个字符“宽”放回缓冲区是安全的。您将不得不添加额外的抽象层以提供更多的回放空间。

或者,如果您的信息流是可搜索的,您可以在开始尝试解析之前记住该位置,然后再回到记住的位置。