vector就是动态数组,他也是在堆中分配内存,元素连续存放,有保留内存,如果减小大小后,内存也不会释放,如果新值大于当前大小时才会在分配内存,他拥有一段连续的内存空间,并且起始地址不变,因此他能很好的支持随即存取。即[]操作符,但由于他的内存空间是连续的,所以在中间进行插入和删除会造成内存快的拷贝,另外,当该数组后的内存空间不足时,需要重新申请一块足够大的内存并进行内存的拷贝。者大大影响了vector的效率,对最后的元素操作最快,此外一般不需要移动内存
对中间和开始处进行操作时,需要移动内存
如果你的元素时结构或是类
那么移动的同时还会进行构造和析构操作所以性能不高最好把结构或类的指针放入vector中
访问方面,对任何元素的访问都是01也就是是常数的,所以vector常用来保存进行随机访问的内容,并且不需要对中间元素进行操作
需要经常随机访问用vector
list就是双向随机链表,元素也是在堆中存放,每个元素都是放到一块内存中,他的内存空间可以是不连续的,通过指针来进行数据的访问,这个特点使得他的随机存取变得非常没有效率,因此他没有提供【】操作符重载,但由于链表的特点,他可以很好的支持任意地方的插入删除
list没有空间预留,所以每分陪一个元素都会从内存中分配没删除一个元素都会释放他的内存,当然也不需要对每一个元素做构造和析构了,随意list被用来做随机操作容器
但是访问list里面的元素就开始和最后访问其他元素都是0(n)
如果需要经常访问的话,还是使用别的好
如果喜欢经常添加删除打对象的话,那么请使用list要保存的对象不大,构造析构操作不复杂,那么可以使用vector代替list<指针>
完全是性能最低的做法,震中情况还是vector<指针>好
因为指针没有构造与析构,也不会占用很大内存