容器的assign函数可能会溢出吗?

时间:2010-03-29 15:21:14

标签: c++ variable-assignment containers

我今天遇到了这个问题,并认为我应该发布它以供社区参考和/或意见。

标准C ++容器vector,deque,list和string提供assign成员函数。有两个版本;我主要对接受迭代器范围的人感兴趣。 Josuttis book对其描述有点含糊不清。从p。 237 ...

  

指定范围的所有元素[beg,end);这就是用[beg,end]元素的副本替换所有现有元素。

没有说明如果受让人容器的大小与分配的范围不同会发生什么。它会截断吗?它是否自动扩展?是不确定的行为?

1 个答案:

答案 0 :(得分:3)

这是我发现的。事实证明,我不必担心默默地做错事。再一次,标准有答案。从第23.2.6.1节:

  

void assign(Iter first, Iter last);

     

效果:

     

erase(begin(), end());

     

insert(begin(), first, last);

所以它只是clear()的快捷方式,后跟全范围的insert