Я хочу вставить в вектор С++ в известном положении. Я знаю, что библиотека С++ имеет функцию insert(), которая занимает позицию, а объект для вставки, но тип позиции - итератор. Я хочу вставить в вектор, как я бы вставлял в массив, используя определенный индекс.
С++ вставить в вектор в известном положении
Ответ 1
Посмотрите на эту отладочную трассировку. Последнее, что выполнено, - std:: copy (__ first = 0x90c6fa8, __last = 0x90c63bc, __result = 0x90c6878). Оглядываясь на то, что вызвало это, вы назвали вставку, в которой позиция была вставлена как 0x90c63bc. std:: copy копирует диапазон [первый, последний] в результат, который должен иметь место для элементов последнего - первого. Этот вызов имеет последний < во-первых, это незаконно (!), поэтому я предполагаю, что позиция, которую вы даете вставить, неверна. Вы уверены, что vnum нигде не пересекается вдоль линии? В GDB с отображением этой трассы вы должны запустить
кадр 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]);
Первая строка дает точку вставки относительно начала некоторой другой переменной, называемой вершинами, а не той, которую вы хотите вставить.
Ответ 2
Это должно делать то, что вы хотите.
vector<int>myVec(3);
myVec.insert(myVec.begin() + INTEGER_OFFSET, DATA);
Имейте в виду, что итераторы могут стать недействительными при перераспределении вектора. См. Этот сайт.
EDIT: Я не уверен, почему другой ответ исчез... но другой человек упомянул что-то вроде:
myVec.insert(INDEX, DATA);
Если я правильно помню, это должно быть прекрасно.
Ответ 3
Всегда приятно обернуть эти вещи:
template <typename T>
T& insert_at(T& pContainer, size_t pIndex, const T::value_type& pValue)
{
pContainer.insert(pContainer.begin() + pIndex, pValue);
return pContainer;
}
Это должно сделать это. Теперь есть удаленный ответ, что вы можете построить итератор из индекса, но я никогда этого не видел. Если это правда, это определенно путь; Я ищу его сейчас.