jeudi 12 septembre 2019

C++ simply code about find_if(), but can't compile successful

#include <string>
#include <vector>
#include <iostream>
#include <functional>

using namespace std;

int main()
{
    vector<string> svec;
    string tmp;
    while (cin >> tmp) {
        if (find(svec.begin(), svec.end(), tmp) != svec.end())
            svec.push_back(tmp);
    }

    for (auto const &str : svec) {
        cout << str << " ";
    }
    cout << endl;
}

error msg as below

11_8.cc: In function ‘int main()’:
11_8.cc:13:47: error: no matching function for call to ‘find(std::vector<std::__cxx11::basic_string<char> >::iterator, std::vector<std::__cxx11::basic_string<char> >::iterator, std::__cxx11::string&)’
         if (find(svec.begin(), svec.end(), tmp) != svec.end())
                                               ^
In file included from /usr/include/c++/7/bits/locale_facets.h:48:0,
                 from /usr/include/c++/7/bits/basic_ios.h:37,
                 from /usr/include/c++/7/ios:44,
                 from /usr/include/c++/7/ostream:38,
                 from /usr/include/c++/7/iostream:39,
                 from 11_8.cc:3:
/usr/include/c++/7/bits/streambuf_iterator.h:369:5: note: candidate: template<class _CharT2> typename __gnu_cxx::__enable_if<std::__is_char<_CharT2>::__value, std::istreambuf_iterator<_CharT> >::__type std::find(std::istreambuf_iterator<_CharT>, std::istreambuf_iterator<_CharT>, const _CharT2&)
     find(istreambuf_iterator<_CharT> __first,
     ^~~~
/usr/include/c++/7/bits/streambuf_iterator.h:369:5: note:   template argument deduction/substitution failed:
11_8.cc:13:47: note:   ‘__gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char>*, std::vector<std::__cxx11::basic_string<char> > >’ is not derived from ‘std::istreambuf_iterator<_CharT>’
         if (find(svec.begin(), svec.end(), tmp) != svec.end())
                                               ^

Aucun commentaire:

Enregistrer un commentaire