重叠的vector :: insert的行为

ava*_*kar 3 c++ vector

C++标准在哪里声明传递给它的迭代器对std::vector::insert不能与原始序列重叠?

编辑:详细说明,我很确定标准不需要标准库来处理这样的情况:

std::vector<int> v(10);
std::vector<int>::iterator first = v.begin() + 5;
std::vector<int>::iterator last = v.begin() + 8;
v.insert(v.begin() + 2, first, last);
Run Code Online (Sandbox Code Playgroud)

但是,我无法在标准中找到任何可以禁止范围[first, last)[v.begin(), v.end())重叠的内容.

Ric*_*den 7

23.1.1/4顺序要求有:

表达式: a.insert(p,i,j)

返回类型: void

前提条件: i,j不是迭代器.在p之前插入[i,j]中的元素副本.

所以i,j不能将迭代器放入向量中.

这是有意义的,因为在插入操作期间,向量可能需要调整自身大小,因此可以首先将现有元素复制到新的存储器位置(通过使当前迭代器无效).