【发布时间】:2019-01-30 16:44:43
【问题描述】:
在我的应用程序中,有一部分需要我制作容器的副本。目前我使用 std::vector (但可能会考虑使用其他东西)。应用程序对延迟非常敏感。所以,我一直在寻找一种方法来尽可能快地复制矢量。我发现 memcpy 比其他任何东西都做得更好。但是,它不会改变向量的内部大小。 IE。 vector.size() 仍然会给我 0。
我知道我走的是哪条路。我不介意扔掉安全检查。我知道有多少元素被复制。我不想使用 vector.resize() 来更改目标向量的大小(这是一个缓慢的操作)。
问题:
std::vector<my_struct> destination_vector;
destination_vector.reserve(container_length);
std::memcpy(destination_vector.data(), original_vector.data(), sizeof(my_struct)*container_length);
在上面的代码之后,我需要告诉我的destination_vector 它的大小。我该怎么做?
谢谢。
【问题讨论】:
-
我会仔细检查文档,vector 有一个名为 resize 的方法
-
这是一个缓慢的操作 有多慢?你测量了吗?
-
编译器已经使用了
memcpy,如果你做得对的话...godbolt.org/z/7Bp4BF -
心理调试:
my_struct不是一个平凡的类型,所以memcpy的任何使用都是 UB,编译器试图从自身中保存 OP。 -
@PaulSanders 如果调整大小小于以前的大小,则不允许重新分配向量。