4、list类

博客介绍了vector和list的特性。vector在任意位置插入和删除需搬移大量数据,list是双向带头结点的双向链表,头插/头删操作方便,end指针存于头节点且双向可循环。还提及list常用接口,指出vector和list查找都需遍历,map有专门find方法,最后对比了二者区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vetor在任意位置进行插入和删除需要搬移大量数据

 

list是一个双向带头结点的双向链表


带头结点的原因:

  1.     头插/头删 操作方便

  2.     end指针存放在头节点

  3.     双向可循环

list的常用接口

1、list类的创建

 

list()

默认构造

 

list(10)

默认第二个参数是0

 

list(10,'a')

赋值构造

 

list(v.begin(), v.end())

迭代器(区间)构造

 

list(arr,arr+19)

给定指针也可以

 

 

2   list的容量操作

resize()

 

3、list的遍历操作

list<int>::iterator it = L2.begin();dd

while{

    cout << *it << endl;

    ++it;//            前置++比后置++效率高

}



//                                      使用的范围for打印

auto it = L2.begin();

for(auto it:L2 ) cout <<*it << endl;

 

4、list的修改

 

unique()去重【相邻相同的元素】

可以让连在一起的相同元素进行去重(将他的乱序的可以先排序)

sort()compare_nocase排序

顺序和逆序

remove(const&T)->是引用

移除指定值的节点

erase(iterator position)->是迭代器

移除指定迭代器的节点

splice()拼接

 

merge()合并 

 

 

 

find()在vector和list中没有find方法

vector和list都是线性结构,查找的时候都是将vector和list都遍历一遍,所以在标准库中实现一个find就可以了

map中有专门的find方法

 

vector和list 的区别

 

 

vector

list

底层结构不同

动态顺序表

带头结点的双向链表

访问的方式不同

支持随机访问

不支持

容量操作不同

在插入元素时,可能需要扩容

没有容量操作

空间利用率不同

平均比较低

平均比较高

对内存的影响不同

可连续的利用空间

碎片化空间

插入的元素效率不同

差O(n)

优O(1)

迭代器的不同

迭代器

 

处理速度不同

处理速度高   

缓存利用率不同(由于数据的局部原理性,内存加载缓存是批量加载)

处理速度低

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值