Heim > Backend-Entwicklung > C++ > Warum gibt „vector.size() - 1' in C nicht -1 zurück?

Warum gibt „vector.size() - 1' in C nicht -1 zurück?

Susan Sarandon
Freigeben: 2024-12-02 19:21:11
Original
337 Leute haben es durchsucht

Why Doesn't `vector.size() - 1` Return -1 in C  ?

Anomalien der Vektorgröße in C

In C gibt die Methode size() des Vektorcontainers die Anzahl der Elemente im Vektor zurück. Allerdings tritt verwirrendes Verhalten auf, wenn der Vektor leer ist, wie im folgenden Codeausschnitt gezeigt:

#include <vector>
#include <iostream>

using namespace std;

int main() {
    vector<int> value;

    cout << value.size() << endl;  // Output: 0
    cout << value.size() - 1 << endl;  // Output: 18446744073709551615
}
Nach dem Login kopieren

Warum ist die zweite Ausgabe nicht -1?

Die Die erste cout-Anweisung gibt korrekt 0 aus, was darauf hinweist, dass der Vektor leer ist. Allerdings gibt die zweite Anweisung überraschenderweise eine sehr große positive Zahl aus, nicht die erwartete -1. Dies liegt daran, dass vector::size() eine vorzeichenlose Ganzzahl vom Typ size_t zurückgibt. Ganzzahlen ohne Vorzeichen können, wie der Name schon sagt, keine negativen Zahlen darstellen.

Wenn daher ein size_t-Wert von sich selbst subtrahiert wird, geht er im Wesentlichen auf die maximal darstellbare Zahl für diesen Typ zurück. In diesem Fall ist size_t normalerweise eine 64-Bit-Ganzzahl, sodass der maximale Wert, den es enthalten kann, 18446744073709551615 ist. Dieser Wert wird als Ausgabe der zweiten Cout-Anweisung gedruckt.

Was passiert während der Zweiter Cout?

Die folgende Berechnungsfolge erklärt das Verhalten dahinter zweiter cout:

  1. value.size() gibt 0 zurück, eine vorzeichenlose Ganzzahl vom Typ size_t.
  2. value.size() - 1 berechnet 0 - 1, was zu 18446744073709551615 führt (die maximal darstellbare Zahl für size_t).
  3. cout gibt dieses Maximum aus Wert als 18446744073709551615.

Das obige ist der detaillierte Inhalt vonWarum gibt „vector.size() - 1' in C nicht -1 zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage