<@乌龟:>高效的使用vector
C++中的vector(矢量)是一个非常方便的东西,可以实现安全的动态数组,可以实现在数组前后插入删除新的元素。
不过在使用的时候也有很多的学问,不然效率可高不起来,这篇文章我将简单的总结一下如何高效的使用矢量。
首先矢量不存储你的对象,而是存储对象的副本,也就是说:每次将对象加入到矢量中去,并不是真正将对象放入矢量中,而是通过复制构造函数或者赋值操作符将对象复制一个放在矢量中。类似的,当你需要从矢量将一个对象取出的时候,也是从矢量将某个元素复制到本地的变量中,考虑下面的代码:
vector<MyObj> myVec;
MyObj obj = myVec[10];
这样的开销非常的大,要尽量减少这种开销,为了使得效率更高,我们应该更倾向于在矢量中存储对象的指针,因为复制指针的速度远远高于复制对象的速度。
其次,应该在使用之前估计该矢量需要分配多大的内存,当对一个矢量出入一系列的元素,使得缓存被占满之后,将发生下面的事情:
1) 为一个新的缓存分配内存
2) 把旧的矢量的数据复制到新的缓存中
3) 销毁旧的缓存
如果是一个比较大的矢量,频繁的发生扩展缓存的情况,效率将是可想而之的
最后,除了在矢量尾端以外其他的任何位置插入元素都是不好的,记住,矢量是一个连续内存的数组,在中间插入元素将会导致插入元素之后的数据平移,也是不小的开销