Замените связку записей 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(),

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

Другие вопросы по тегам