18 容器之list探索

1、概述

本篇主要在之前的基础上,更加深入的介绍STL中的双向链表容器List,包括List类模板、迭代器iterator等。

2、List的结构

1)容器List是双向链表的结构,如下:

解析:

a、List是环状的链式结构,在链表最后有块空白节点用于实现容器的前闭后开区间,用end()方法返回。

b、链表中包含迭代器node,里面包含操作符重载,如++来实现每个链表元素向指向下一个节点。

2)G2.9链表结构


说明:容器list中复合一个_list_node<T>,而_list_node<T>是链表中数据,包括两个指向自身的指针和存放的数据。

链表list的模板类,如下:

链表中复合的_list_node<T>数据,如下:

链表中的迭代器(是类迭代器),如下:

注意点:

a、类迭代器中通过5种typedef和操作符重载实现对node的操作,而node正是指向链表数据_list_node<T>;

b、如通过List<Foo>::iterator ite声明迭代器,Foo类型就是data数据对象,可以通过*ite取得Foo对象。

3、G2.9与G4.9的差异

注意点:

a、G4.9List容器设计的迭代器类模板参数只有一个,其它两个都是在类中具体表示,这样比较简洁;

b、G2.9设计的数据node中的prev和next指向是void*,而实际上是指向node本身,并在G4.9中以这种方式实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值