#c #templates
#c #шаблоны
Вопрос:
#include <iostream>
#include <iterator>
#include <vector>
using namespace std;
template<typename Iter1, typename Iter2>
bool pred(Iter1 it1, Iter2 it2){
if(*it1 == *it2)
return true;
return false;
}
template<typename FwdIter1, typename InIter2, typename BinPred>
bool contains(FwdIter1 first1, FwdIter1 last1, InIter2 first2, InIter2 last2, BinPred pred){
for(InIter2 it2 = first2; it2 != last2; it2){
for(InIter2 it1 = first1; it1 != last1; it1){
if(pred(it1, it2)){
return true;
}
}
}
return false;
}
int main()
{
vector<int> v1 {2, 5, 6, 8};
vector<int> v2 {1, 2, 3, 10};
if (contains(v1.begin(), v1.end(), v2.begin(), v2.end(), pred))
cout << "Element found" << 'n';
else
cout << "Element not found n";
return 0;
}
Почему это происходит?
error: no matching function for call to 'contains(std::vector<int>::iterator, std::vector<int>::iterator, std::vector<int>::iterator, std::vector<int>::iterator, < unresolved overloaded function type >)'
Ответ №1:
Вы должны указать аргументы шаблона для pred
, например
if (contains(v1.begin(), v1.end(), v2.begin(), v2.end(),
pred<decltype(v1.begin()), decltype(v2.begin())>))
Комментарии:
1. Большое вам спасибо!