【发布时间】:2020-05-27 00:22:05
【问题描述】:
我想像这样将原始字节附加到vector。
vector.reserve(current_size + append_data_size);
memcpy(append_data, vector.data() + current_size, append_data_size);
vector.resize(current_size + append_data_size) // Expect only set size to current_size + append_data_size.
下面是不是比较慢?因为我认为向量首先初始化为默认值,然后设置浪费的数据。
vector.resize(current_size + append_data_size);
memcpy(append_data, vector.data() + current_size, append_data_size);
【问题讨论】:
-
当
resize放大一个向量时,它会创建新值(即使它们已经有空间)。reserve操作只是腾出空间。 -
如果你想给一个vector添加数据,使用它的接口。例如
vector.insert(iter_pos_into_vec, start_of_range_to_copy, end_of_range_to_copy) -
你说你想追加,但你正在使用
memcmp()!?另外,n是什么?为什么n + 100会变成100? -
@UlrichEckhardt 谢谢!这是一个错字,
-
现在,检查
memcpy()的参数。这正是您需要提供minimal reproducible example 的原因,顺便说一句。它避免了无法编译且不起作用的代码,从而混淆了问题。
标签: c++ performance vector