list容器与vector/deque比较类似,都是用来存放数组的。
最大的区别在于存放规则:
对于vector/deque,它存放数组会找一段连续的内存空间来存放,这也就是说,vector中的元素并不能被随意插入,只能在头部或尾部插入;
list存放数组,它的内存空间并不是连续的,而是任意的,那么它就可以被随意插入元素,很轻松。
这样的存放规则就注定他们的读取规则也不一样:
vector/deque每个元素是挨着的,我可以在上一个元素的地址的基础上加一,来找到下一个元素(也就是C中[]的方法);
list的话就肯定不能这样做了;由于list中每个元素的信息中,除了本身的信息外,它还有一个向前指针,指向前一个元素,以及一个向后指针,指向后一个元素,这样一来,list中访问元素的话,就只能利用迭代器实现了。
那么他们的应用场景就知道了:
如果需要高效的随机存取,而不在乎插入和删除的效率,使用vector;
如果需要大量的插入和删除,而不关心随机存取,则应使用list。