替换一堆std :: vector条目

and*_*dre 1 c++ stdvector

我有一个std :: vector.我指定这个矢量

vec.assign(20000, 0);
Run Code Online (Sandbox Code Playgroud)

现在我有一个额外的数组,我想插入到向量中.但不仅仅是插入,更多的替换元素在向量中.

uint8_t a[] = {1,2,3,4,5,6,7,8};
Run Code Online (Sandbox Code Playgroud)

将该数组移动到位置x - x + 8上的向量中,而不分配新内存.

我尝试和工作的当然是

vec.insert(start, a, a+8);
Run Code Online (Sandbox Code Playgroud)

但是我在那里分配新的内存并且向量的大小发生变化,这是不应该发生的.是的,我可以删除,条目太多,但仍然有问题,我分配更多的内存.是否有可能只用向量的内容替换数组?像这样的Smth:

vec.replace(start, a, a+8);
Run Code Online (Sandbox Code Playgroud)

我想避免更换每个元素,因为我担心这可能需要太长时间.

你怎么看?有没有办法做到这一点?你以前也遇到过这个问题吗?你怎么修好它的?

joh*_*ohn 6

简单

#include <algorithm>

std::copy(a, a + 8, vec.begin());
Run Code Online (Sandbox Code Playgroud)

aupto 复制元素a + 8并替换从...开始的元素vec.begin().

我认为你担心效率是错误的.上面的解决方案确实取代了每个元素,并且可能不会比您自己编写替换代码更有效率.如果上面的代码有任何优势,那就是清晰度,这是一个被忽视的优势.