Замените кучу записей std::vector

У меня есть std::vector. Я назначаю этот вектор как

vec.assign(20000, 0);

Теперь у меня есть дополнительный массив, который я хочу вставить в вектор. Но НЕ так же, как вставка, больше заменяет элементы в векторе.

uint8_t a[] = {1,2,3,4,5,6,7,8};

Переместите этот массив в вектор в позиции x - x+8 без выделения новой памяти.

То, что я пробовал и работает, конечно

vec.insert(start, a, a+8);

Но там я выделяю новую память и меняется размер вектора, чего не должно происходить. Да, я мог бы удалить записи, которых слишком много, но проблема еще в том, что я выделяю больше памяти. Разве нет возможности просто заменить массив содержимым вектора? Что-то вроде этого:

vec.replace(start, a, a+8);

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

Что вы думаете? Есть ли способ сделать это? У вас тоже была такая проблема раньше? Как ты это починил?


person andre    schedule 16.10.2012    source источник


Ответы (1)


Простой

#include <algorithm>

std::copy(a, a + 8, vec.begin());

Копирует элементы с a по a + 8 и заменяет элементы, начиная с vec.begin().

Я думаю, что вы ошибаетесь, беспокоясь об эффективности. Приведенное выше решение действительно заменяет каждый элемент и, вероятно, будет не более и не менее эффективным, чем если бы вы сами написали код замены. Если приведенный выше код и имеет какое-либо преимущество, так это ясность, преимущество, которое часто упускают из виду.

person john    schedule 16.10.2012