Witam, jest to mój pierwszy post.
Mam pewien problem. Bawiąc się w pisanie algorytmów z stl, trafiłem na pewien nie zrozumiały dla mnie problem. Dlaczego kod poniżej jest poprawny
template <typename InputIterator,typename T,typename BinaryPred>
InputIterator search_n(InputIterator beg,InputIterator end,int Size,T elem,BinaryPred op)
{
int licznik = 0;
InputIterator tmp;
while(beg != end)
{
if(op(*beg,elem))
{
if(licznik == 0) tmp = beg;
++licznik;
}
else licznik = 0;
if(licznik == Size) return tmp;
++beg;
}
return end;
}
a gdy daję referencję do parametru typu T już nie. Kompilator wywala błąd że nie ma konwersji int do int&
template <typename InputIterator,typename T,typename BinaryPred>
InputIterator search_n(InputIterator beg,InputIterator end,int Size,T& elem,BinaryPred op)
{
int licznik = 0;
InputIterator tmp;
while(beg != end)
{
if(op(*beg,elem))
{
if(licznik == 0) tmp = beg;
++licznik;
}
else licznik = 0;
if(licznik == Size) return tmp;
++beg;
}
return end;
}
Użycie funkcji w mainie:
vector<int>::iterator pos2 = search_n(v.begin(),v.end(),2,11,greater<int>());
if(pos2 != v.end())
{
cout << "Kolejne 2 wartosci wieksze od 11 zaczynaja sie od " << distance(v.begin(),pos2) +1 << " pozycji" << endl;
}
else
{
cout << "Nie ma takich elementow" << endl;
}
Bardzo proszę kogoś ogarniętego o wyjaśnienie tego