相关疑难解决方法(0)

可以在预期正向迭代器的地方使用输入迭代器吗?

据我所知,迭代器类别的层次结构如下:

Random access -> Bi-directional -> Forward -> Input
                                           -> Output
Run Code Online (Sandbox Code Playgroud)

正确?

我一直认为有一个规则,如果算法需要特定类型的迭代器,你可以在链上提供类别的迭代器,但不能向下.所以我正在阅读这个答案,其中ildjarn 建议使用std::ifstreamwith std::istream_iteratorstd::search在文件中查找数据.我即将评论你不能这样做,因为search期望正向迭代器,并且istream_iterator是一个输入迭代器.但只是为了确保,我试过这个:

std::istringstream iss("Elephant hats for sale.");
std::istream_iterator<char> begin(iss), end;

std::string sub("hat");
auto i = std::search(begin, end, sub.begin(), sub.end());
Run Code Online (Sandbox Code Playgroud)

我没想到它会编译,但确实如此.但是,结果似乎没用,因为如果我遵循它:

while(i != end)
{
    std::cout << *i;
    ++i;
}
Run Code Online (Sandbox Code Playgroud)

没有输出.所以,我的问题是:我的编译器错误地允许我的调用search使用istream_iterator?或者没有规则阻止这种事情?

c++ iterator stl

13
推荐指数
1
解决办法
2191
查看次数

标签 统计

c++ ×1

iterator ×1

stl ×1