1. ホーム

C++ ベクトル検索エラー: 'find(std::vector<int>::iterator, std::v)' の呼び出しにマッチする関数がありません。

2022-02-13 05:57:04

findメソッドを使ってベクトル内の要素を探すと、実は不思議な問題が見つかりました。

このfind関数を単体で検証してみると、特に問題はありませんでした。このコードになると、不思議なんです。

/home/xxx/xxx.cpp:163:63: error: no matching function for call to 'find(std::vector<int>::iterator, std::vector<int> ;::ite
rator, __gnu_cxx::__alloc_traits<std::allocator<int> >::value_type&)' となります。
         it = find(tQubits.begin(), tQubits.end(), AllQubits[i]);
                                                               ^
usr/include/c++/6/bits/locale_facets.h:48:0 からインクルードされたファイルにあります。
                 usr/include/c++/6/bits/basic_ios.h:37 から。
                 usr/include/c++/6/ios:44 から。
                 usr/include/c++/6/istream:38 から。
                 usr/include/c++/6/fstream:38 から。
                 /home/fdd/Quantum_simulator/shor_factoring/core/QCore.h:11 から。
                 /home/fdd/Quantum_simulator/shor_factoring/core/QCore.cpp:8 から。
/usr/include/c++/6/bits/streambuf_iterator.h:369:5: note: 候補: template<class _CharT2> typename __gnu_cxx::__enable_if< std::__is_char<_CharT2>::__value, st
d::istreambuf_iterator<_CharT> >::__type std::find(std::istreambuf_iterator<_CharT>, std::istreambuf_iterator<_CharT>, const _CharT2&)
     find(istreambuf_iterator<_CharT> __first,
     ^~~~
/usr/include/c++/6/bits/streambuf_iterator.h:369:5: note: template argument deduction/substitution failed:
/home/xxx/xxx.cpp:163:63: note: '__gnu_cxx::__normal_iterator<int*, std::vector<int> >' is not derived from 'std::istre'.
ambuf_iterator<_CharT>' です。
         it = find(tQubits.begin(), tQubits.end(), AllQubits[i]);
                                                               ^

海外のサイトで解決策を見つけるのに時間がかかった。find関数はアルゴリズムを含むヘッダーファイルを必要とする。

という行を追加して、解決しました。

そこで、これを文書化して、後世に役立てたいと思ったのです