2017-01-04 5 views
0

У меня есть vector<set<int>> v(10);. Каждый набор может быть заполнен некоторыми данными. Затем я вставляю целые числа в случайные множества, например. v[5].insert(99);. Может ли это вызвать неопределенное поведение?Правильно ли заполнять наборы, содержащиеся в векторе?

+0

Не так долго, как 'v' содержит не менее шести значений. –

+0

Показать еще код. В этом фрагменте нет ничего плохого. –

+0

Я голосую, чтобы закрыть этот вопрос как не по теме, потому что проблема была в другом месте – Pavel

ответ

1

Только если вы выходите из границ вектора.

Если у вашего vector есть не менее 6 элементов, то v[5].insert(99); четко определен.

Чтобы быть уверенным, что вы этого не сделаете, вы можете использовать функцию at аксессора:

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

Какой будет бросить std::out_of_range исключение, если вы пытаетесь получить доступ мимо конца массива.

+0

Не собираются ли по очереди одни в памяти? – Pavel

+0

@Pavel Единственное потенциальное неопределенное поведение - это доступ к вектору, а не вставка в множества. – Barmar

+0

@Pavel, вы получаете доступ к вектору и вставляете его в набор. Вставка в набор не является неопределенным поведением. –