binsearch na iteratorach

0

Co jest nie tak z tym kodem?

int mysearch(vector<int>::iterator first, vector<in>::iterator last, const int m)
{
  vector<int>::iterator srodek;
  if(first>last) return 0;
  *srodek=((*last+*first)>>1);
  cout<<"srodek: "<<*srodek<<endl;
  cout<<"first: "<<*first<<endl;
  cout<<"last: "<<*last<<endl;
  if(m<*srodek)
    return mysearch(first, srodek-1, m);
  if(m>*srodek)
    return mysearch(srodek+1, last, m);
  return *srodek;
}

Po wywołaniu tej funkcji program zatrzymuje się komunikatem "Naruszenie ochrony pamięci".

1

Zwyczajnie nie ma prawa się skompilować, prawdopodobnie edytujesz co innego niż odpalasz.

  vector<int>::iterator srodek=first+((last-first)>>1);
  if(m<*srodek) return mysearch(first, srodek, m); // drugi iterator zawsze jest poza zakresem
  if(m>*srodek) return mysearch(srodek+1, last, m);
  return srodek-first;

Odradzam rozwiązania rekurencyjnego

0

Dlaczego nie moge

vector<ui>::iterator srodek=(last+first)>>1;

Jest błąd kompilacji main.cpp:12: błąd:no match for 'operator+' in 'last + first', ale nie do konca to rozumiem.

EDIT: Przy probie kompilacji Twojego rozwiązania rowniez mam błąd kompilacji:
main.cpp:12: błąd:no match for 'operator-' in 'last - first'

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0