c ++ вставить в вектор в известной позиции - PullRequest
18 голосов
/ 25 февраля 2010

Я хочу вставить в вектор C ++ в известной позиции. Я знаю, что в библиотеке c ++ есть функция insert (), которая принимает позицию и объект для вставки, но тип позиции является итератором. Я хочу вставить в вектор, как я бы вставил в массив, используя определенный индекс.

Ответы [ 3 ]

21 голосов
/ 25 февраля 2010

Это должно делать то, что вы хотите.

vector<int>myVec(3);
myVec.insert(myVec.begin() + INTEGER_OFFSET, DATA);

Обратите внимание, что итераторы могут стать недействительными при перераспределении вектора. Пожалуйста, смотрите этот сайт .

РЕДАКТИРОВАТЬ: Я не уверен, почему другой ответ исчез ... но другой человек упомянул что-то вроде:

myVec.insert(INDEX, DATA);

Если я правильно помню, все должно быть в порядке.

9 голосов
/ 25 февраля 2010

Всегда приятно обернуть эти вещи:

template <typename T>
T& insert_at(T& pContainer, size_t pIndex, const T::value_type& pValue)
{
    pContainer.insert(pContainer.begin() + pIndex, pValue);

    return pContainer;
}

Это должно сделать это. Теперь есть удаленный ответ, что вы можете создать итератор из индекса, но я никогда раньше этого не видел. Если это правда, это определенно путь; Я ищу это сейчас.

5 голосов
/ 25 февраля 2010

Посмотрите на этот след отладки. Последнее, что выполняется, это std :: copy (__ first = 0x90c6fa8, __last = 0x90c63bc, __result = 0x90c6878). Оглядываясь назад на то, что вызвало это, вы назвали insert, давая позицию для вставки, как 0x90c63bc. std :: copy копирует диапазон [first, last) в результате, который должен иметь место для элементов last - first. Этот вызов имеет значение last

кадр 10

печать внум

проверить. На самом деле, если вы не просто сократили свой вопрос, я только что нашел вашу ошибку. Ваша вторая строка:

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]);

В первой строке указывается точка вставки относительно начала некоторой другой переменной, называемой вершинами, а не той, в которую вы хотите вставить.

...