std::lower_bound und std::finden Sie auf einem einfachen array

Möchte ich std::algorithm Wann immer ich kann auf normalen arrays. Jetzt habe ich 2 Zweifel; angenommen, ich will std::lower_bound was passiert, wenn die Wert, die ich als argument nicht gefunden?

int a[] = {1,2,3,4,5,6};
int* f = std::lower_bound(a,a+6,20);

Das Ergebnis habe ich beim drucken *f 20.

Das gleiche passiert, wenn ich std::find.

int a[] = {1,2,3,4,5,6};
int* f = std::find(a,a+6,20);

Das Ergebnis habe ich beim drucken *f 20.

  1. Ist es immer der Fall, dass der Rückgabewert ist das ursprüngliche argument
    wenn diese nicht gefunden wird?
  2. In Bezug auf Leistung std::lower_bound führt besser von std::find da es implementiert eine binäre Suche Algorithmus. Wenn das array groß sagen max 10 Elemente, könnte std::finden Sie besser? Hinter den kulissen std::lower_bound ruft std::advance und std::distance ..vielleicht kann ich Sie retten, auf diese Anrufe?

Vielen Dank

AFG

Das Ergebnis haben Sie 20? Du meinst f? Oder *f? Wenn es f, das ist irrelevant, und unwahrscheinlich. Wenn es *f sollten Sie nicht dereferenzieren von f gibt.
Ich korrigiere meine Frage "das Ergebnis habe ich beim drucken *f", 20. Gibt es trotzdem, um zu testen, ob das element wurde nicht in den unteren Schranke/finden Ergebnis?
Über Ihre Leistung zu Fragen: Was wollen Sie erreichen? Sie scheinen, zu verzichten Verwendung von STL-Containern, während zur gleichen Zeit, die Verwendung von STL-Funktionen und sich Gedanken über Ihre Komplexität. Ich bin neugierig.
Test: if (f == a+6)
Wenn bei diesem test ist sicher, auch wenn für arrays vergeben stack ich erwarte gute Leistungen, die Nutzung dieser Nutzung. Vielen Dank.

InformationsquelleAutor Abruzzo Forte e Gentile | 2012-06-01

Schreibe einen Kommentar