2017-06-25 5 views
-3

Zum BeispielVektor <bool> arr Reset-Ausgabe

vector<bool> arr(10); 
arr[0]=true; 

Und dann möchte ich den Vektor zurücksetzen. So ,

arr.clear(); 

Ich erwarte, dass Vektor mit allen Elementen Null, da Falsch Null ist.

printf("%d", arr[0]); 

Aber Ergebnis num> 0;

Sogar der Wert vor dem Löschen ist derselbe wie der Wert nach dem Löschen!

Was ist passiert?

// Test Code 
    vector<bool> arr(101); 
    arr[1] = true; 
    printf("Before Value : %d\n", arr[1]); 
    arr.clear(); 
    printf("Result : %d\n", arr[1]); 

    // Test Code 




vector<bool> arr(101); 
printf("asdf : %d\n", arr.size()); 

// Test Code 
arr[1] = true; 
printf("Before Value and size : %d, %d\n", arr[1], arr.size()); 
arr.clear(); 
printf("Result and size : %d, %d\n", arr[1], arr.size()); 

// Test Code 
+2

* "Ich erwarte Vektor mit allen Elementen Null, weil False Null ist." * - Warum erwartest du das? Es gibt Dokumentation, Sie sollten nicht raten, was ein Stück API tut. – StoryTeller

+0

Siehe: http://en.cppreference.com/w/cpp/container/vector/clear – Shubham

Antwort

2

Nachdem Sie clear() die Größe des Vektors aufrufen 0 wird so Zugriff auf ein beliebiges Element Index-Operator mit arr[0]undefinierten Verhalten verursacht. Wenn Sie versuchen, mit der Methode at() auf das erste Element zuzugreifen, wird das Verhalten wohldefiniert sein und es wird ::std::out_of_range Exception ausgelöst.

+0

Dieser Mittelwert ist, dass nach clear(), nicht arr (100) auf 0 initialisiert, nur arr? – StackQ

+0

'clear()' bedeutet nicht 'Null initialisieren', es ist eine Methode, um alle Elemente aus dem Container zu entfernen. Ein ziemlich irreführender Methodenname, denke ich. – VTT

+0

Oh ... Ich habe es ... Es tut mir leid. Und ich habe eine andere Frage. – StackQ

Verwandte Themen