C++中vector和list的优缺点对比以及deque
两者基本上优缺点互补
vector:
优点:
1、尾插尾删效率不错,支持高效下标随机访问
2、物理空间连续,所以告诉缓存利用效率高
缺点:
1、空间需要扩容,扩容有代价
2、头部和中间插入删除效率低
list
优点:
1、按需申请释放空间,不需要扩容
2、任意位置插入删除
缺点:
1、不支持下标的随机访问
vector和list的缝合怪——deque
开辟若干个数组(buff),还有一个中控数(是一个指针数组ptr),会试图把第一个数组的地址放在中控数组中间;当中控数组满了会进行扩容
假设每个buff数组大小是N,要获取第i个数据,x = i / N就是第x个数组,y = i % N就是第x个数组的第y个
访问方式就是ptr[x][y],即 *(*(ptr + x) + y)
总结:
1、deque头插、尾插效率不错,更胜于list和vector
2、下标随机访问也还不错,但不如vector
3、在中间插入删除效率很低,不如list,要挪动数据,效率是O(N)