Замените связку записей 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);
Я хотел избежать замены каждого элемента, потому что боюсь, что это может занять слишком много времени.
Как вы думаете? Есть способ сделать это? У вас тоже раньше была такая проблема? Как ты это починил?
1 ответ
Просто
#include <algorithm>
std::copy(a, a + 8, vec.begin());
Копирует элементы из a
вплоть до a + 8
и заменяет элементы, начиная с vec.begin()
,
Я думаю, что вы не правы беспокоиться об эффективности. Приведенное выше решение действительно заменяет каждый элемент и, вероятно, будет не более и не менее эффективным, чем если бы вы написали код замены самостоятельно. Если приведенный выше код имеет какое-либо преимущество, это ясность, намного упускаемое из виду преимущество.