一、list:封装链表相关功能
函数功能 |
功能 |
push_back |
在尾部添加一个结点 |
pop_back |
在尾部删除一个结点 |
push_front |
在头部添加一个结点 |
pop_front |
在头部删除一个结点 |
clear |
清空所有结点 |
back |
返回尾结点 |
front |
返回头结点 |
size |
返回结点的个数 |
insert |
在中间插入结点 |
erase |
删除中间结点 |
二、实例
#include<stdio.h>
#include<list>//头文件
using namespace std;//命名空间
int main(){
list<int> lst;//声明
lst.push_back(1);//在尾部插入一个结点
lst.push_back(2);//在尾部插入一个结点
lst.push_front(3); //在头部插入一个结点
lst.pop_back();//在尾部删除一个结点
return 0;
}
三、链表不能随机访问,只能按顺序链式访问,所以,只能使用迭代器iterator遍历
#include<stdio.h>
#include<list>//头文件
using namespace std;//命名空间
int main(){
list<int> lst;//声明
lst.push_back(1);//在尾部插入一个结点
lst.push_back(2);//在尾部插入一个结点
lst.push_front(3); //在头部插入一个结点
lst.pop_back();//在尾部删除一个结点
//迭代器遍历
list<int>::iterator iter;
for(iter=lst.begin();iter!=lst.end();iter++){
int& value=*iter;
printf("%d ",value);
}
return 0;
}
四、list比vector更适合插入删除操作
list链表中插入/删除一个节点
(1)遍历list,找到目标位置
(2)调用insert/erase,插入/删除一个节点
#include<stdio.h>
#include<list>
using namespace std;
int main(){
list<int> lst;//声明
lst.push_back(1);
lst.push_back(3);
lst.push_back(5);
lst.push_back(7);
lst.push_back(9);
//删除值为3的节点
list<int>::iterator iter;
for(iter=lst.begin();iter!=lst.end();iter++){
int& value=*iter;
if(value==5){
lst.erase(iter);//迭代器指向这个节点
break;
}
printf("%d ",value);//1 3
}
return 0;
}
五、重要性
vector可有可无,但lsi必不可少。
vector不常用到,使用普通的数组完全没有问题。list经常用到,如果没有list,那么每个链表都需要从头写起,十分麻烦。