Я хочу вставить в вектор C++ в известном положении. Я знаю, что библиотека C++ имеет вставку () функция, которая занимает позицию и объект вставить, но тип положения является итератором. Я хочу вставить в вектор как, я вставил бы в массив, с помощью определенного индекса.
Посмотрите на след отладки. Последнее, что выполняется, - это std :: copy (__ first = 0x90c6fa8, __last = 0x90c63bc, __result = 0x90c6878). Оглядываясь назад на то, что вызвало это, вы вызвали insert, задав позицию для вставки как 0x90c63bc. std :: copy копирует диапазон [первый, последний) в результат, в котором должно быть место для последних и первых элементов. Этот вызов имеет last frame 10 print vnum для проверки. Фактически, если вы не только что сократили свой вопрос, я только что нашел вашу ошибку. Ваша вторая строка: Должно быть: Первая строка дает точку вставки относительно начала некоторой другой переменной, называемой вершинами, а не той, в которую вы хотите вставить.
new_mesh->Face(face_loc)->vertices.insert(vertices.begin()+vnum+1, new_vertices[j]);
new_mesh->Face(face_loc)->vertices.insert(new_mesg->Face(face_loc)->vertices.begin()+vnum+1, new_vertices[j]);
Это должно сделать то, что вы хотите.
vector<int>myVec(3);
myVec.insert(myVec.begin() + INTEGER_OFFSET, DATA);
Пожалуйста, имейте в виду, что итераторы могут стать недействительными при перераспределении вектора. Пожалуйста, посмотрите этот сайт.
EDIT: Я не уверен, почему другой ответ исчез... но другой человек упомянул что-то вроде:
myVec.insert(INDEX, DATA);
Если я правильно помню, это должно быть просто отлично.
Всегда приятно завершить эти вещи:
template <typename T>
T& insert_at(T& pContainer, size_t pIndex, const T::value_type& pValue)
{
pContainer.insert(pContainer.begin() + pIndex, pValue);
return pContainer;
}
Это должно сработать. Существует удаленный ответ о том, что вы можете построить итератор из индекса, но я никогда раньше этого не видел. Если это правда, то это определенно правильный путь; Ищу сейчас.