binsearch na iteratorach

binsearch na iteratorach
pingwindyktator
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 2 miesiące
  • Lokalizacja:Kraków
  • Postów:1055
0

Co jest nie tak z tym kodem?

Kopiuj
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".


do not code, write prose
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 miesiące
1

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

Kopiuj
  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


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 2x, ostatnio: _13th_Dragon
pingwindyktator
Rozwiązanie rekurencyjne mam narzucone odgórnie.
pingwindyktator
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 2 miesiące
  • Lokalizacja:Kraków
  • Postów:1055
0

Dlaczego nie moge

Kopiuj
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'


do not code, write prose
edytowany 1x, ostatnio: pingwindyktator
Zobacz pozostałe 7 komentarzy
pingwindyktator
Dalej nie rozumiem roznicy między tym, ze mozesz sobie odjąc "last-first" a nie mozesz sobie dodac, ale moze jeszcze raz przeczytaj jakis kurs nt wskaznikow i iteratorów.
_13th_Dragon
Wyobraź sobie że iteratory to wskaźniki, ba dla vector<int> to naprawdę wskaźniki int* no i teraz powiedz mi co chcesz otrzymać jak dodajesz adresy dwóch wskaźników.
pingwindyktator
A co chcesz otrzymac, jak odejmujesz takie adresy od siebie?
_13th_Dragon
Odległość pomiędzy wskaźnikami - ile int'ów jest pomiędzy nimi.
pingwindyktator
Okej, rozumiem, dzieki wielkie ; )
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 miesiące
1

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.