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())重叠的内容.
23.1.1/4顺序要求有:
表达式: a.insert(p,i,j)
返回类型: void
前提条件: i,j不是迭代器.在p之前插入[i,j]中的元素副本.
所以i,j不能将迭代器放入向量中.
这是有意义的,因为在插入操作期间,向量可能需要调整自身大小,因此可以首先将现有元素复制到新的存储器位置(通过使当前迭代器无效).