Hereのコード:なぜデータベクタをクリアした後でもそれにアクセスできますか?
vector<double> samples;
int main()
{
samples.resize(100);
for(int i=0; i<100; i++) {
samples[i]=i/100.0;
}
samples.clear();
cout << "vector size: " << samples.size() << endl;
cout << "... but samples[9]=" << samples[9] << endl;
}
て出力する:
vector size: 0
... but samples[9]=0.09
ベクトルをクリアした後、私はまだそのデータにアクセスすることができます(サイズは0です)。それは普通ですか?
Referenceによると、要素は「破棄されます」と表示されますが、「デフォルト/空」の値ではないようです。私は、実行時に「範囲外」のエラーメッセージになるだろう他の言語では
...それは、「デフォルト/空」の値を意味するものではありませんようだ
'samples.at(9)'を使ってみましたか? –
未定義の動作は未定義です。 –
サイズはゼロに設定されていますが、容量は変更されていません。割り当てられたストレージはまだそこにあり、再利用を待っています。 – user4581301