2017-06-25 1 views
-3

をリセットベクトル<bool>はARR、例えば発行

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

そして、私はベクトルをリセットしたいです。 ので、

arr.clear(); 

私は偽がゼロであるため、すべての要素を持つベクトルがゼロに期待しています。

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

しかし、結果num>は0;

クリア前の値さえクリア後の値と同じです!

どうしましたか?あなたは、ベクトルの大きさはそれほど未定義の動作を起こしarr[0]添字演算子を使って任意の要素にアクセスする0となりclear()を呼び出した後

// 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

* "Falseがゼロであるため、すべての要素がゼロのベクターが必要です。" * - なぜそれを期待していますか?ドキュメントがありますが、APIが何をしているのか推測すべきではありません。 – StoryTeller

+0

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

答えて

2

at()メソッドを使用して最初の項目にアクセスしようとすると、動作は明確に定義され、::std::out_of_range例外がスローされます。

+0

その意味は、clear()の後、arr(100)が0に初期化されていないかどうかです。 – StackQ

+0

'clear()'は 'zero initialize'を意味するものではなく、コンテナからすべてのアイテムを削除するメソッドです。私が推測するやや誤解を招くメソッド名。 – VTT

+0

ああ...私はそれを持って...私はとても残念です。 そして別の質問があります。 – StackQ