Jiu*_*Jiu 2 c++ performance vector
我想像这样附加原始字节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.
Run Code Online (Sandbox Code Playgroud)
下面是不是更慢?因为我认为矢量首先初始化为默认值,然后设置浪费的数据。
vector.resize(current_size + append_data_size);
memcpy(append_data, vector.data() + current_size, append_data_size);
Run Code Online (Sandbox Code Playgroud)
修改向量存储超出其大小是未定义的行为,后续resize将在存储结束时初始化新元素。
但是,您可以insert改用:
vector.insert(vector.end(), bytes, bytes + size);
Run Code Online (Sandbox Code Playgroud)
即使您调用reserve,resize如果您想访问新元素,您仍然必须调用向量,否则您的代码的行为是undefined。有什么reserve 可以做的是使push_back等这样的操作更有效率。
就我个人而言,我不会关心任何此类优化,除非您可以证明它们对适当的分析工具有影响。通常情况下,摆弄 a 的容量std::vector是没有意义的。
使用memcpy也是危险的。(例如,不会调用复制构造函数,例如,了解在结构中复制填充的确切行为memcpy是提高您在此站点上的声誉的可靠方法!)insert改为使用并信任编译器进行适当的优化。
在没有显式附加参数的情况下, std::vector::resize值初始化任何附加成员。通俗地说这意味着一个元素std::vector的T发言权被设置为值的方式相同t的static T t;是。