C++链表类模板

C++链表类模板

链表(list),即双向链表容器,它不支持随机访问,访问链表元素要指针从链表的某个断点开始,插入和删除操作所花费的时间是固定的,和该元素在链表中的位置无关。list在任何位置插入和删除动作都很快,不像vector只能在末尾操作。

创建list链表类模板的方法:

#include<list>		//调用list头文件
	...
	...
list<int>l;			//定义一个list
//list表示声明一个链表,<type>表示链表的类型,l表示链表名。

list对象主要成员函数说明:

只是一些常用的,其它还有很多list函数。

函数 说明
begin 返回指向链表第一个元素的迭代器
end 返回指向链表最后一个元素的迭代器
size 返回链表的大小
clear 删除链表中所有元素
erase(start,end) 删除迭代器从start到end范围内的向量
erase(i) 删除迭代器第i个元素
insert(i,x) 把值x插入到由迭代器指明的第i个位置
insert(i,start,end) 把迭代器从start到end范围的元素插入到指明的第i个位置
insert(i,n,x) 把x的n个副本插入到由迭代器指明的第i个位置
push_back(x) 将值x放到链表末尾
push_front(x) 将值x放到链表首部
pop_back 删除链表最后一个元素
pop_front 删除链表第一个元素
resize(n,x) 设置链表大小为n,初始值为x
reverse 颠倒元素的顺序
swap(vector) 交换两个向量的内容

可以发现,list链表所支持的操作与vector向量很相近,但这些操作的实现原理不尽相同,执行效率也不一样。list双向链表的优点是插入元素的效率很高,缺点是不支持随机访问,也就是说,链表无法像数组一样通过索引来访问,形如:

list<int>l;
l[3]=4;			//错误
cout<<l[3];		//错误

链表无法通过索引进行赋值和输入输出。

关于vector向量的学习————》》C++向量类模板

迭代器

对list双向链表各个元素的访问,通常使用迭代器。
迭代器定义方法:

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

定义了一个迭代器it指向双向链表 l 的开始指针。

list双向链表与迭代器的入门应用

源代码:

#include<iostream>
#include<list>		//list头文件
using namespace std;
int main(){
	
	list<int>l;					//定义链表l
	int a[8]={1,3,8,6,7,2,5,4};	//定义数组a
	l=list<int>(a,a+8);			//将数组a赋值给l
	l.sort();					//排序
	
	list<int>::iterator it1=l.begin();	//定义迭代器it1指向双向链表 l 的开始指针
	for(;it1!=l.end();it1++)
		cout<<*it1<<" ";				//通过变更it1的指向遍历输出l中的所有元素
	cout<<endl;
	
	l.insert(l.end(),9); 			//将9插入到l的末尾
	list<int>::iterator it2=l.begin();
	for(;it2!=l.end();it2++)
		cout<<*it2<<" ";
	cout<<endl;
	
	list<int>::iterator it3=l.begin();
	cout<<*it3+3;		//通过迭代器加减的方式取代索引输出
	
	return 0;
}

值得一提的是,循环终止的条件是it!=l.end()而非人们惯用的it<l.end()

结果图:
list

发布了18 篇原创文章 · 获赞 32 · 访问量 2277

猜你喜欢

转载自blog.csdn.net/zhaizhaizhaiaaa/article/details/104098510