nev*_*219 21
这应该做你想要的.
vector<int>myVec(3);
myVec.insert(myVec.begin() + INTEGER_OFFSET, DATA);
Run Code Online (Sandbox Code Playgroud)
请注意,当重新分配向量时,迭代器可能会失效.请看这个网站.
编辑:我不确定为什么另一个答案消失了...但另一个人提到了以下内容:
myVec.insert(INDEX, DATA);
Run Code Online (Sandbox Code Playgroud)
如果我没记错的话,这应该没问题.
包装这些东西总是很好:
template <typename T>
T& insert_at(T& pContainer, size_t pIndex, const T::value_type& pValue)
{
pContainer.insert(pContainer.begin() + pIndex, pValue);
return pContainer;
}
Run Code Online (Sandbox Code Playgroud)
应该这样做.现在已经删除了一个可以从索引构造迭代器的答案,但我以前从未见过.如果这是真的,那肯定是要走的路; 我现在正在寻找它.
看看那个调试跟踪.执行的最后一件事是std :: copy(__ first = 0x90c6fa8,__last = 0x90c63bc,__ result = 0x90c6878).回顾一下导致它的原因,你调用insert给出了插入位置为0x90c63bc的位置.std :: copy将范围[first,last]复制到result,其中必须有最后一个元素的空间.这个调用最后是<first,这是非法的(!),所以我猜你给插入的位置是错误的.你确定vnum没有沿线下降吗?在显示该跟踪的GDB中,您应该运行
第10帧
打印vnum
去检查.事实上,如果您在问题中没有缩写,我刚刚发现了您的错误.你的第二行是:
new_mesh->Face(face_loc)->vertices.insert(vertices.begin()+vnum+1, new_vertices[j]);
Run Code Online (Sandbox Code Playgroud)
应该是:
new_mesh->Face(face_loc)->vertices.insert(new_mesg->Face(face_loc)->vertices.begin()+vnum+1, new_vertices[j]);
Run Code Online (Sandbox Code Playgroud)
第一行给出插入点相对于其他一些称为顶点的变量的开头,而不是您要插入的变量.