list链表操作
(一)、定义及其初始化
1.list 和vector的区别
链表相比于vector,优点在于方便插入和删除,缺点是随机访问比较慢。
2.【list链表初始化】
list<数据类型> 函数名;
3.【设定空间初始化】
list<数据类型> 函数名(a,b); 设定a个空间,元素为b.
4.动态链表赋值动态链表】
list<数据类型>函数名1(函数名2); 把动态链表2复制给动态链表1
5.【利用迭代器复制动态链表】
list<数据类型>函数名1(函数名2.begin(),函数名2.end()); 动态链表二复制给动态链表1
6.【普通数组复制给链表】
list<数据类型>函数名1(函数名2,sizeof(函数名2)/sizeof(int));
6.1代码展示:
#include <list>
using namespace std;
int main()
{
list<int> list_a; //初始化为0
list<int> list_b(4,88); //开辟四个空间,且每个元素都为88;
list<int> list_c(list_b); // 动态链表复制给动态链表
list<int> list_d(list_b.begin(), list_b.end()); //利用迭代器的方法
int s[] = { 2,5,8 };
list<int> list_e(s, s + sizeof(s)/sizeof(int)); //普通数组复制给链表
}
6.2效果展示:
(二)、list的基本属性
1.【链表的长度】
函数名.size()
2.【链表的清空操作】
函数名.clear()
3.【判断链表是否为空】
函数名.empty()
4.【获取链表第一个元素】
函数名.front()
5.【获取链表最后一个元素】
函数名.back()
6.【链表与链表的交换】
函数名.swap()
7.【链表的排序】
函数名.sort() 默认升序
8.实战项目
8.1代码展示:
#include <list>
using namespace std;
int main()
{
list<int> list_a; //初始化为0
int s[4] = { 2,5,8 };
list<int> list_b(s, s + sizeof(s)/sizeof(int)); //普通数组复制给链表
int size;
size = list_a.size(); //链表长度
bool is_list = list_a.empty(); //链表是否为i空
list_b.push_front(1); //在头部插入
list_b.push_back(2); //在尾部插入
int a=list_b.front(); //获取第一个
int b=list_b.back(); //获取最后一个
// list_b.clear();
list_a.swap(list_b);
list_a.sort(); // 对链表进行排序,默认升序
return 0;
}
8.2效果展示:
(三)、list链表的应用
1.【头部插入一个数据】
函数名.push_front()
2.【尾部插入一个数据】
函数名.push_back()
3.【多元插入数据】
函数名.insert(函数名.begin(),n) 从哪开始 插入谁
4.【多元插入数据2】
函数名.insert(函数名.begin(),n,m) 从哪开始 插入几个 插入谁
5.【利用迭代器插入】
iist〈函数类型〉 ::iterator 对象名;
对象名=函数名.begin();
函数名.insert(对象名,个数,元素)
6.【删除头一个元素】
函数名.pop_front()
7.【删除最后一个元素】
函数名.pop_back()
8.【多元删除数据】
函数名1.erase(函数名1.begin(),函数名1.end()
9.【链表遍历只能是迭代器遍历】
iist〈函数类型〉 ::iterator 对象名;
for(对象名=函数名.begin();对象名!=end();对象名++)
{
cout<<*对象名;
}
10.实战项目
代码展示:
#include <list>
#include <iostream>
using namespace std;
int main()
{
list<int> list_a; //初始化为0
int s[4] = { 2,5,8 };
list<int> list_b(s, s + sizeof(s)/sizeof(int)); //普通数组复制给链表
list_b.push_front(1); //在头部插入
list_b.push_back(2); //在尾部插入
list_b.insert(list_b.begin(), 66); // 从哪插入, 插入什么
list_b.insert(list_b.end(), 88);
list_b.insert(list_b.end(),3, 100); // 从哪插入, 插入几个,插入谁
list<int>::iterator it; //利用迭代器锦新插入
it = list_b.begin();
it++;
list_b.insert(it, 5, 111);
list_b.insert(list_b.begin(), s, s + sizeof(s) / sizeof(int)); //插入普通数组
list_b.pop_front(); //删除头部一个
list_b.pop_back(); //删除尾部一个
//list_b.erase(list_b.begin(), list_b.end()); // 从头到位删除
list<int>::iterator itor;
for (itor = list_b.begin(); itor!= list_b.end(); itor++)
{
cout << *itor << " ";
}
return 0;
}
效果展示:
(四)、实战操作:
1.代码展示:
【切记呀,在list链表中只能用迭代器进行操作,而且也不能在删除的过程中使用+的符号】
#include <iostream>
#include <list>
using namespace std;
int main()
{
int i = 0;
list<int> list_a(13);
list<int>::iterator it;
for (it=list_a.begin();it!=list_a.end();it++)
{
i++;
cout << "请输入第"<< i<< "个数据" << endl;
cin >> *it;
}
for (it = list_a.begin(); it != list_a.end(); it++)
{
int j = 0;
if (*it == 3)
{
list_a.erase(it, it);
}
else
{
cout << *it << " ";
}
}
return 0;
}
2.项目效果
制作不易,还请多多指教…
本文含有隐藏内容,请 开通VIP 后查看