我正在尝试使用std::istream_iterator<std::string>
在std::find
范围内找到一个元素。代码无法编译,吐出有关模板类型扣除失败的错误
错误:没有匹配函数来调用&#39; find(std :: istream_iterator&gt;&amp;,std :: istream_iterator&gt;&amp;,std :: __ cxx11 :: string&amp;)&#39; auto it = std :: find(is,end,token);
注意:候选人:模板typename __gnu_cxx :: __ enable_if :: __ value,std :: istreambuf_iterator&lt; _CharT&gt; &gt; :: __ type std :: find(std :: istreambuf_iterator&lt; _CharT&gt;,std :: istreambuf_iterator&lt; _CharT&gt;,const _CharT2&amp;) find(istreambuf_iterator&lt; _CharT&gt; __ first,
注意:模板参数扣除/替换失败:
但是,使用the implementation of std::find
from 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";
}
有人知道std::find
和istream_iterator
的错误吗?我虽然对std::find
的要求非常基本:迭代器应该是一个InputIterator,istream_iterator
是。
答案 0 :(得分:7)
确实,确实。您输入以下内容未将没有匹配功能可以拨打&#39;查找&#39;
std::find
带入范围:
#include <algorithm>