2010-03-29 64 views
2

今天我遇到了這個問題,並認爲我應該將其發佈給社區參考和/或意見。容器的分配函數可能溢出嗎?

標準的C++容器向量,deque,list和string提供了一個assign成員函數。有兩個版本;我主要對接受迭代器範圍的人感興趣。 Josuttis book與它的描述有點模棱兩可。來自p。 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

只是打字而已。 :)爲了使它更清楚,'assign'可能被稱爲「'reassign'」,以清除容器的內容被完全重新分配。 – GManNickG 2010-03-29 15:24:43