采用find方法来查找vector中的元素,居然发现奇怪的问题。
我自己单独验证这个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]);
^
In file included from /usr/include/c++/6/bits/locale_facets.h:48:0,
from /usr/include/c++/6/bits/basic_ios.h:37,
from /usr/include/c++/6/ios:44,
from /usr/include/c++/6/istream:38,
from /usr/include/c++/6/fstream:38,
from /home/fdd/Quantum_simulator/shor_factoring/core/QCore.h:11,
from /home/fdd/Quantum_simulator/shor_factoring/core/QCore.cpp:8:
/usr/include/c++/6/bits/streambuf_iterator.h:369:5: note: candidate: 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函数需要包含algorithm的头文件。。。
添加一行#include<algorithm>就解决啦!
所以得记录一笔,希望对后人有帮助!