2017-01-04 4 views
0

私はvector<set<int>> v(10);です。各セットはいくつかのデータで埋められます。次に、整数をランダムにセットします。 v[5].insert(99);。それは未定義の動作を引き起こすことができますか?ベクターに含まれるセットを埋めるのは正しいですか?

+0

「v」には少なくとも6つの値が含まれています。 –

+0

もっとコードを表示する。ここに表示されているスニペットには何も問題はありません。 –

+0

問題が別の場所にあったため、この質問を議論の対象外とすることに投票しました – Pavel

答えて

1

ベクトルの範囲外に出た場合のみ。

vectorに少なくとも6つの要素がある場合は、v[5].insert(99);が明確に定義されています。

あなたは、あなたがatアクセサ関数で使用することができていないことを確認するために:

v.at(5).insert(99); 

あなたは、配列の末尾を越えてアクセスしようとした場合にstd::out_of_range例外をスローします。

+0

セットが1つずつメモリに移動していませんか? – Pavel

+0

@Pavel定義されていない可能性のある唯一の動作は、ベクターにアクセスして、セットに挿入しないことです。 – Barmar

+0

@Pavel、あなたはベクトルにアクセスし、セットに挿入しています。セットへの挿入は未定義の動作ではありません。 –

関連する問題