一、基本原理
list是双向链表,forward_list是单向链表,在链表的任何位置添加或删除元素都很快,但是作为代价,这两个容器都不支持随机访问,为了访问容器中的某一个元素,我们只能遍历整个容器。
forward_list是C++新标准增加的类型,其设计目标是达到与最好的手写单向链表数据结构相当的性能,因此forward_list没有size操作,因为保存或计算其大小会比手写链表多出额外的开销。对于其他容器而言(比如list),size保证是一个常量时间的操作。
二、用法
以下都以容器list、forward_list中的元素为int为例,若要保存其他类型的元素,将int换成其他类型即可。使用list、forward_list应该包含以下头文件:
// 包含头文件
#include <list>
#include <forward_list>
// 使用命名空间std
using namespace std;
初始化
list<类型名> 链表名; | 双向链表 |
---|---|
list<int> li1; | 创建一个名为li1的双向链表,li1中的元素类型为int |
list<int> li1(100,7); | li1中的元素为100个7 |
list<int> li1{1,2,3,……}; | 元素为1,2,3,……的li1 |
list<int> li2(li1); | 链表li2中包含和链表li1一样的元素 |
list<int> li2=li1; | 链表li2中包含和链表li1一样的元素 |
forward_list<类型名> 链表名; | 单向链表 |
---|---|
forward_list<int> f1; | 创建一个名为f1的单向链表,f1中的元素类型为int |
forward_list<int> f1(100,7); | f1中的元素为100个7 |
forward_list<int> f1{1,2,3,……}; | 元素为1,2,3,……的f1 |
forward_list<int> f2(f1); | 链表f2中包含和链表f1一样的元素 |
forward_list<int> f2=f1; | 链表f2中包含和链表f1一样的元素 |
访问元素、获取迭代器
list | |
---|---|
li1.front(); | 访问li1的链首元素 |
li1.back(); | 访问li1的链尾元素 |
*iter | 访问迭代器iter指向的元素 |
li1.begin(); |