55、vector 使⽤的注意点及其原因,频繁对 vector 调⽤ push_back()性能影响
使⽤注意点:
注意插⼊和删除元素后迭代器失效的问题;
清空 vector 数据时,如果保存的数据项是指针类型,需要逐项 delete,否则会造成内存泄漏。
频繁调⽤ push_back()影响:
向 vector 的尾部添加元素,很有可能引起整个对象 存储空间的重新分配,新分配更⼤的内存,再将原数据拷⻉到新空间中,再释放原有内存,这个过程是耗时耗⼒的,频繁对 vector 调⽤ push_back()会导致性能的下降。
在 C++11 之后,vector 容器中添加了新的⽅法:emplace_back() ,和 push_back() ⼀样的是都是在容器末尾添加⼀个新的元素进去,不同的是 emplace_back() 在效率上相⽐ 较于 push_back() 有了⼀定的提升。
emplace_back() 函数在原理上⽐ push_back() 有了⼀定的改进,包括在内存优化⽅⾯和 运⾏效率⽅⾯。内存优化主要体现在使⽤了就地构造(直接在容器内构造对象,不⽤拷⻉⼀个 复制品再使⽤) +强制类型转换的⽅法来实现,在运⾏效率⽅⾯,由于省去了拷⻉构造过程,因此也有⼀定的提升。
Last updated