list
基本用法
- 插入与删除:
list<int> m_list;
m_list.push_back(10); //尾插法(尾部插入)
m_list.push_front(2); //头插法(插入头部)
font
&back
m_list.front(); //获取链表头部元素
m_list.back(); //获取链表尾部元素
size
:
m_list.size(); //2 获取链表中的结点个数
sort
list
容器自带了sort
方法,list
无法使用STL提供的全局sort
函数的
(1)全局的sort函数的参数是RandomAccessIterator
即随机访问迭代器,而list迭代器的类型是BidirectionalIterator
类型,因此无法使用
list<int> m_list{ 6, 8, 2, 9, 3, 1, 10 };
m_list.sort(); //1 2 3 6 8 9 10
基本原理
- list提供的迭代器类型是
双向迭代器
,支持+=
操作,因此无法使用全局sort
list
是一个双向环形链表
,list
中node结点始终指向尾端的空白结点,因此是一种前闭后开
的区间结构list
的迭代器,在插入和接合操作之后,都不会造成原迭代器的失效
- list迭代器:
forward_list
list
是双向链表,而forward_list
是单向链表
(1)list
的迭代器是双向迭代器
,forward_list
是单向迭代器
(Forward iterator
)
(2)forward_list
灵活性比list
差,但所消耗的空间更小
基本用法:
forward_list
是单向链表,因此无法在某个迭代器指定的位置之前插入元素,但是可以再头部插入元素push_front
forward_list
提供了insert_after
和erase_after
的方法,用于在迭代器指定位置的后面插入元素forward_list
提供了before_begin()
方法用于提供指向提一个节点前一个节点(头结点)的迭代器
基本用法
- 插入删除:
forward_list
没有push_back
只有push_front
forward_list
没有back
只有front
forward_list<int> m_forward_list;
m_forward_list.push_front(10); //头部插入10
m_forward_list.push_front(20);
m_forward_list.front(); //20
sort
:
- 与
list
类似,forward_list
中也自带sort
方法,无法使用全局sort
方法
m_forward_list.sort();