list的使用及其底层实现

一.简言

list类似于c语言中的链表。

优势:

1.方便使用

2.功能齐全

二.构造

1.运用

//1
std::list<int> first;                                // empty list of ints
//2
std::list<int> second (4,100);                       // four ints with value 100
//3
std::list<int> third (second.begin(),second.end());  // iterating through second
//4
std::list<int> fourth (third);                       // a copy of third

<type>中代表你选择的类型如上图使用的是int

第一种创建:类似C语言中的内置类型

第二种创建 :创建4个结点,结点类型是int,值为100

第三种创建 : 给定迭代器(类似于指针,C++通过封装实现自定义类型的指向迭代器)区间,创建与迭代器区间值一样的list

第四种创建 :拷贝构造,给定list类型创建的对象,赋予一个新创建的list的对象

2.实现

跟链表一样需要一个Node结点结构体

类里成员创建一个链表(双向链表)的头结点(空)

初始化构造

push_back函数见下文

三.修改

1.运用

(1)push_back()函数

 类似链表的尾插

list<int> l1;
l1.push_back(1);
l1.push_back(2);
l1.push_back(3);

(2)insert

指定位置之前插入,返回插入位置迭代器位置。

(3)erase

指定位置删除,返回删除位置之前一个位置的迭代器,来解决迭代器失效问题

(4)pop_back

尾删

(5)pop_front

头删

(6)push_front

头插

四.访问

(1)back
(2)front

五. 迭代器的实现与封装

1.简言

上编文章vector讲到迭代器可以++,但是迭代器的底层原理是指针,指针本身就可以++,而对于链表结构实现向下一个结点的访问需要通过next来实现,所以我们需要将其封装通过重载++来实现其效果。

2.封装

这里为什么我们不使用

ListIterator<T>这种形式呢?

因为在使用const_iterator的时候,如果传const T的话,会导致ListNode种的val类型是const T,从而导致类型不匹配的问题,所以我们可以只改变指针和引用。

3.实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值