1

我有一个 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);

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

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

4

1 回答 1

6

简单的

#include <algorithm>

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

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

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

于 2012-10-16T10:17:04.017 回答