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)

你可能感兴趣的:(c++,开发语言,数据结构)