【发布时间】:2016-05-04 20:54:47
【问题描述】:
我需要尝试从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 等)吗?如果不是,为什么不呢?
【问题讨论】:
-
std::istringstream只能输入,只能从中读取,不能将putback()数据写入其中。 -
题外话,如果到达
EOF,返回一个较短的向量不是更好,而不是返回一个带有尾随EOFs的向量吗? -
@Remy 需要引用
-
@AlanStokes:在en.cppreference.com/w/cpp/io/basic_istream/putback 运行示例代码。
putback()在std::istringstream上失败,并被这样评论。 -
@RemyLebeau 你不能修改它——但你可以把相同的字符放回去——这就是我想要做的。