我试图找到一个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::find和istream_iteratorS' 我虽然要求std::find是非常基本的:迭代器应该是一个InputIterator,它istream_iterator是.
没有匹配函数来调用'find'
嗯,的确如此.您没有std::find通过键入以下内容进入范围:
#include <algorithm>
Run Code Online (Sandbox Code Playgroud)