std :: find无法使用istream_iterators

vso*_*tco 1 c++ iterator

我试图找到一个std::istream_iterator<std::string>使用范围跨越的元素std::find.代码无法编译,吐出有关模板类型扣除失败的错误

错误:没有匹配函数来调用'find(std :: istream_iterator>&,std :: istream_iterator>&,std :: __ cxx11 :: string&)'auto it = std :: find(is,end,token);

注意:候选人:模板typename __gnu_cxx :: __ enable_if :: __ value,std :: istreambuf_iterator <_CharT >> :: __ type std :: find(std :: istreambuf_iterator <_CharT>,std :: istreambuf_iterator <_CharT>,const _CharT2&)find (istreambuf_iterator <_CharT> __first,

注意:模板参数扣除/替换失败:

然而,使用的执行std::find从cppreference(一个简单的实现)使代码编译:

#include <iostream>
#include <iterator>
#include <sstream>

// implementation of std::find from cppreference.com
template<class InputIt, class T>
InputIt find(InputIt first, InputIt last, const T& value)
{
    for (; first != last; ++first) {
        if (*first == value) {
            return first;
        }
    }
    return last;
}

int main() 
{
    std::istringstream ss("this is a test");
    std::istream_iterator<std::string> is(ss);
    std::istream_iterator<std::string> end;

    std::string token = "test";
    auto it = find(is, end, token); // put std::find here and it won't compile
    (it != end) ? std::cout << "Found\n" : std::cout << "Not found\n";
}
Run Code Online (Sandbox Code Playgroud)

是否有任何人知道什么是错用std::findistream_iteratorS' 我虽然要求std::find是非常基本的:迭代器应该是一个InputIterator,它istream_iterator是.

Lig*_*ica 7

没有匹配函数来调用'find'

嗯,的确如此.您没有std::find通过键入以下内容进入范围:

#include <algorithm>
Run Code Online (Sandbox Code Playgroud)

  • 对我来说这完全是愚蠢的......谢谢!我正忙于理解模板错误消息......该死。投票结束问题。 (2认同)
  • 有趣的是“std::find”似乎在算法之外有一些重载。否则,错误应该不那么冗长,例如:`错误:'find'不是'std'的成员` (2认同)