2010-03-29 3 views
2

Я столкнулся с этим вопросом сегодня и думал, что должен опубликовать его для ссылки сообщества и/или мнений.Может ли функция назначения для контейнеров переполняться?

Стандартный вектор контейнеров C++, deque, list и string предоставляет функцию-член assign. Есть две версии; Меня в первую очередь интересует тот, кто принимает диапазон итераторов. Josuttis book немного двусмыслен с его описанием. С. 237 ...

Назначает все элементы диапазона [beg, end); это, заменяет все существующие элементы копиями элементов [beg, end).

Он не говорит, что произойдет, если размер контейнера-цессионария отличается от назначенного диапазона. Усекает? Автоматически ли оно расширяется? Это неопределенное поведение?

ответ

3

Вот что я нашел. Оказывается, мне не нужно было беспокоиться о том, чтобы сделать что-то не так. Еще раз, стандарт имеет ответ. Из раздела 23.2.6.1:

void assign(Iter first, Iter last);

Эффекты:

erase(begin(), end());

insert(begin(), first, last);

Так что это на самом деле просто ярлык для clear() сопровождаемого insert из полный диапазон.

+0

Просто набрал его. :) Чтобы сделать его более понятным, «присваивание» можно было бы назвать «переназначить», чтобы было ясно, что содержимое контейнера полностью переназначено. – GManNickG

Смежные вопросы