C++ 向量赋值与插入

C++ 向量赋值与插入,c++,stl,vector,C++,Stl,Vector,我理解这两个操作的语义, 分配-在替换为提供的值之前擦除。 插入-在指定位置插入值(如有必要,分配新内存) 除此之外,还有什么理由把一个优先于另一个吗? 或者换句话说,是否有任何理由使用assign而不是insert。如果您希望调用assign的语义,请调用assign-如果您希望调用insert的语义,请调用insert。它们不能互换 至于在空向量上调用它们,唯一的区别是在调用assign时不需要提供迭代器来插入。可能存在性能差异,但这是特定于实现的,几乎可以肯定是可忽略的。assign和in

我理解这两个操作的语义, 分配-在替换为提供的值之前擦除。 插入-在指定位置插入值(如有必要,分配新内存)

除此之外,还有什么理由把一个优先于另一个吗?
或者换句话说,是否有任何理由使用assign而不是insert。

如果您希望调用
assign
的语义,请调用assign-如果您希望调用
insert
的语义,请调用insert。它们不能互换


至于在空向量上调用它们,唯一的区别是在调用
assign
时不需要提供迭代器来插入。可能存在性能差异,但这是特定于实现的,几乎可以肯定是可忽略的。

assign
insert
只有在向量开始为空时才是等效的。如果向量已经是空的,那么最好使用
assign
,因为
insert
会错误地提示读者存在要保留的现有元素。

assign()
将清除
向量中已有的任何内容,然后添加新元素
insert()
不接触
向量中已有的任何元素

除此之外,如果要修改的
向量开始时为空,则差别不大。

insert()将在特定位置插入元素。它可以是单个值,也可以是使用第一个和最后一个迭代器的多个值。这就像在一个位置前面插入更多元素一样


assign()将根据输入图“InputIterator first和InputIterator last”从开始到结束分配值。这将删除所有现有元素,并根据其参数中提供的范围使用新值填充向量。

也许您可以通过问这样一个问题来解决这个问题:“在空STL向量上分配vs插入,有什么区别吗?”这很公平。这就是我的想法。