list用法简介
list是一个双端链表,所以相对vector而言,优点是删除和插入更快速.但缺点是随机访问数据效率变低了.
list的很多用法和vector类似.这里主要讲下它不同的一些用法.
先随便定义一个list对象
list<int> lt;
lt.push_back(88);
list<int> lt2( lt );
1.不支持随机访问
由于list随机访问相对于vector而言太慢了,所以干脆不提供该功能.所以不能lt.at(0)或者lt[0]这样用了.
2.支持在头和尾部添加与删除元素
vector中push_back与pop_back都只是针对尾部元素的添加与删除.而list除了仍旧有这两函数还多出另外两个.
lt.push_front( 11); //在头部添加元素
lt.pop_front(); //在头部删除元素.
3.合并两个链表
lt.merge(lt2); //表示把lt与lt2合并成一个链表,也就是把lt2的元素移到lt中,并且默认是升序的.而lt2则变为空
4.删除匹配元素
lt.remove( 11); //删除链表中值为11的所有元素
5.反转链表
lt.reverse(); //把链表中元素的顺序反过来
6.顺序(默认升序)
lt.sort();
7.删除相邻重复元素
lt.unique(); //要先lt.sort()排序下.排序后相同元素肯定变相邻了
deque 用法简介
deque也是采用动态数组来表示,但是内存管理方式跟vector有点不一样
所以vector中有reserve, capacity这两函数,而deque就没有.
deque可以说是结合了vector和list的一些功能.
可以随机访问数据(vector有,而list没有的功能)
可以添加和删除头部元素(list有而vector没有的功能)
deque<int> de;
de.push_back(88);
de.push_front(11);
int num = de.at(0);
int ret = de[0];
de.pop_front();
de.pop_back();
vector , list , deque比较
1.vector随机访问数据性能最好.
所以如果经常访问数据,但除了在尾部外很少在其他地方添加删除元素.则用vector.
2.list随机添加删除元素性能最好.
所以如果经常添加删除数据,而较少随机访问数据,则用list.
3.deque可随机访问元素,也可在头部和尾部添加删除元素
deque跟vector一样可以随机访问数据,但性能不如vector好.另外deque比vector多出的功能是可以头部添加删除元素.当然删除添加元素性能也不如list好
所以针对又想随机访问数据,又需要在头部添加删除元素的则用deque.