C++ вставляет в вектор в известном положении

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

18
задан myx 25 February 2010 в 00:28
поделиться

3 ответа

Посмотрите на след отладки. Последнее, что выполняется, - это 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]);

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

5
ответ дан 30 November 2019 в 07:33
поделиться

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

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

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

EDIT: Я не уверен, почему другой ответ исчез... но другой человек упомянул что-то вроде:

myVec.insert(INDEX, DATA);

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

21
ответ дан 30 November 2019 в 07:33
поделиться

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

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

    return pContainer;
}

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

9
ответ дан 30 November 2019 в 07:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: