Заменете куп 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