C语言中vector使用有哪些实用小技巧?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1156个文字,预计阅读时间需要5分钟。
前言:这篇短文我想起名为《关于vector的两个小困惑》,其实也不算困惑,只是自己对原理性的东西理解得不够透彻。工作中遇到的问题,后来归根到底都是基于原理的。
前言
本来这篇文章标题我想起成《关于 vector 的两个小坑》,后来想想,其实也不算是坑,还是自己对原理性的东西理解的没做那么透彻。工作中遇到的很多问题,后来归根到底都是基础不牢靠。
vector 扩容
这个问题很经典了,但还是不小心踩到。有一个需求是要对目标元素进行复制,而目标元素集合是保存在 vector 里面,于是简单思考下就有如下代码(大致含义):
void Duplidate(vector<Element>* element_list, Element* element) { element_list.push_back(*element); } void Process() { for (auto& package : package_list) { if (IsNeedDuplicate()) { Duplicate(element_list, package->element); } } }
看起来好像没什么问题,就是当前的 package 对象是否满足复制的要求,需要的话,就对 package 的成员 origin_element 进行复制。跑 UT 也正常,然后在测试的时候就 coredump 了。看 core 文件就是挂在了复制的时候。这里我一开始就没明白,一个简单的复制为什么会有 coredump。
检查了很久 element 复制的场景,甚至想要专门写一个拷贝构造函数。
本文共计1156个文字,预计阅读时间需要5分钟。
前言:这篇短文我想起名为《关于vector的两个小困惑》,其实也不算困惑,只是自己对原理性的东西理解得不够透彻。工作中遇到的问题,后来归根到底都是基于原理的。
前言
本来这篇文章标题我想起成《关于 vector 的两个小坑》,后来想想,其实也不算是坑,还是自己对原理性的东西理解的没做那么透彻。工作中遇到的很多问题,后来归根到底都是基础不牢靠。
vector 扩容
这个问题很经典了,但还是不小心踩到。有一个需求是要对目标元素进行复制,而目标元素集合是保存在 vector 里面,于是简单思考下就有如下代码(大致含义):
void Duplidate(vector<Element>* element_list, Element* element) { element_list.push_back(*element); } void Process() { for (auto& package : package_list) { if (IsNeedDuplicate()) { Duplicate(element_list, package->element); } } }
看起来好像没什么问题,就是当前的 package 对象是否满足复制的要求,需要的话,就对 package 的成员 origin_element 进行复制。跑 UT 也正常,然后在测试的时候就 coredump 了。看 core 文件就是挂在了复制的时候。这里我一开始就没明白,一个简单的复制为什么会有 coredump。
检查了很久 element 复制的场景,甚至想要专门写一个拷贝构造函数。

