我今天遇到了这个问题,并认为我应该发布它以供社区参考和/或意见。
标准C ++容器vector,deque,list和string提供assign
成员函数。有两个版本;我主要对接受迭代器范围的人感兴趣。 Josuttis book对其描述有点含糊不清。从p。 237 ...
指定范围的所有元素[beg,end);这就是用[beg,end]元素的副本替换所有现有元素。
没有说明如果受让人容器的大小与分配的范围不同会发生什么。它会截断吗?它是否自动扩展?是不确定的行为?
答案 0 :(得分:3)
这是我发现的。事实证明,我不必担心默默地做错事。再一次,标准有答案。从第23.2.6.1节:
void assign(Iter first, Iter last);
效果:
erase(begin(), end());
insert(begin(), first, last);
所以它只是clear()
的快捷方式,后跟全范围的insert
。