C++list的用法

list:容器,完成的功能实际上和数据结构中的双向链表是极其相似的,也就是list也具有链表的主要优点:插入、删除操作速度较快。

vector : vector和built-in数组类似,拥有一段连续的内存空间,能非常好的支持随即存取,即[]操作符,但由于它的内存空间是连续的,所以在中间进行插入和删除会造成内存块的拷贝,另外,当插入较多的元素后,预留内存空间可能不够,需要重新申请一块足够大的内存并把原来的数据拷贝到新的内存空间。这些影响了vector的效率,但是实际上用的最多的还是vector容器,建议大多数时候使用vector效率一般是不错的

list:   list就是数据结构中的双向链表,因此它的内存空间是不连续的,通过指针来进行数据的访问,这个特点使得它的随即存取变的非常没有效率,因此它没有提供[]操作符的重载。但由于链表的特点,它可以以很好的效率支持任意地方的删除和插入。

deque: deque是一个double-ended queue,它的具体实现不太清楚,但知道它具有以下两个特点:它支持[]操作符,也就是支持随即存取,并且和vector的效率相差无几,它支持在两端的操作:push_back,push_front,pop_back,pop_front等,并且在两端操作上与list的效率也差不多。

因此在实际使用时,如何选择这三个容器中哪一个,应根据你的需要而定,具体可以遵循下面的原则:

1. 如果你需要高效的随即存取,而不在乎插入和删除的效率,使用vector

2. 如果你需要大量的插入和删除,而不关心随即存取,则应使用list

3. 如果你需要随即存取,而且关心两端数据的插入和删除,则应使用deque

初始化:
list<int> L_tmp;  //声明list
list<int> L_tmp(5);  //声明一个list,具有5个元素 
list<int> L_tmp(5, 1);  //声明一个list,具有5个元素,每个元素都是1
int a[5] = {1,2,3,4,5};
list<int> L_tmp(a, a+5);
常用函数:
容器大小:L_tmp.size();
插入元素:L_tmp.push_back(10);  
改变容器大小:L_tmp.resize(1);
判断为空:L_tmp.empty();
删除末尾数据:L_tmp.pop_back();
清空容器:L_tmp.clear();
头部元素:L_tmp.front();
尾部元素:L_tmp.back();
insert插入数据:
①L_tmp.insert(L_tmp.begin(), 100);   //在开始位置插入数值100
②L_tmp.insert(L_tmp.begin(), 2, 55); //在开始位置插入2个数值55
③L_tmp.insert(L_tmp.begin(), C_tmp.begin(), C_tmp.end());//在开始位置插入C_tmp的数据。
erase删除数据:
①L_tmp.erase(L_tmp.begin()); //删除第一个元素
②L_tmp.erase(L_tmp.begin(), L_tmp.end()); //删除开始到结束的数据
list遍历:
list<int>::iterator iter;
for(iter = L_tmp.begin(); iter != L_tmp.end(); ++iter)
{
    cout<<*iter<<endl;
}

参考:

http://www.cplusplus.com/reference/list/list/

https://blog.csdn.net/yas12345678/article/details/52601578/

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值