2016-12-15 3 views
1
vector<int> input = {1, 2, 3, 4, 17, 117, 517, 997}; 
cout<< "input vector at index -1 is: " << input[-1] <<endl; 

die über dem Code verwenden, wird das Ergebnis sein: Eingang am Index -1 ist: 0. Wenn wir jedoch follwoing verwenden:über Operator negativer Index des Vektors Zugriff [] und .at()

vector<int> input = {1, 2, 3, 4, 17, 117, 517, 997}; 
cout<< "input vector at index -1 is: " << input.at(-1) <<endl; 

Das Ergebnis wäre: Eingang bei Index -1 ist: libC++ abi.dylib: mit abgefangene Ausnahme vom Typ std :: Abschluss out_of_range: Vektor.

Kann jemand den Grund zu mir erklären? Vielen Dank.

Antwort

7

Das at Mitglied überprüft und reagiert entsprechend.

Die operator [] nicht. Dies ist ein nicht definiertes Verhalten und ein Fehler in Ihrem Code.

Dies ist explizit in der Dokumentation angegeben.

+0

Könnten Sie mir bitte sagen, was ein Fehler sein könnte? Es scheint für jeden Eingabevektor, dass sein Index bei -1 immer 0 ist, wenn ich operator [] verwende. – Feng

+1

@FengZhou Das ist ein Zufall, dass Sie eine '0' an dieser Position sehen. Es ist immer noch eine illegale Aussage. Sie schauen außerhalb des Inhalts des Vektors. Der Inhalt, den Sie nicht ansehen dürfen, enthält eine "0". –

+0

Danke. Ja, es ist ein Zufall, denke ich. – Feng

2

Das erste ist undefiniertes Verhalten. Alles könnte passieren. Sie dürfen sich nicht beschweren, egal was passiert.

Die zweite, eine Ausnahme wird ausgelöst und Sie fangen es nicht, so std::terminate() wird aufgerufen und Ihr Programm stirbt. Das Ende.

Verwandte Themen