list操作指南
#include <iostream>
using namespace std;
#include <list>
#include <algorithm>
void printList(const list<int>& L)
{
for (auto it = L.begin(); it != L.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
//一、构造函数
/*
list<T> lst; 采用模板类实现,默认无参构造函数
list(lst.begin(), lst.end()); 将lst[begin(), end())区间中的元素拷贝给本身
list(n, elem); 构造函数将n个elem拷贝给本身
list(const list & lst); 拷贝构造函数
*/
void ltest01()
{
list<int> L1;
L1.push_back(10);
L1.push_back(20);
L1.push_back(30);
L1.push_back(40);
printList(L1);
list<int> L2(L1.begin(), L1.end());
printList(L2);
list<int> L3(L2);
printList(L3);
list<int> L4(10, 1000);
printList(L4);
}
//二、赋值和交换
/*
给list容器进行赋值,以及交换list容器
assign(beg, end); 将[beg, end)区间中的数据拷贝赋值给本身
assign(n, elem); 将n个elem拷贝赋值给本身
list & operator=(const list & lst); 重载等号操作符
swap(lst); 将lst与本身的元素互换
*/
void ltest02()
{
list<int> L1;
L1.push_back(10);
L1.push_back(20);
L1.push_back(30);
L1.push_back(40);
printList(L1);
list<int> L2;
L2 = L1;
printList(L2);
list<int> L3;
L3.assign(L2.begin(), L2.end());
printList(L3);
list<int> L4;
L4.assign(10, 100);
printList(L4);
//采用L1和L4做交换
cout << "交换前:" << endl;
printList(L1);
printList(L4);
L1.swap(L4);
cout << "交换后:" << endl;
printList(L1);
printList(L4);
}
//三、大小操作
/*
empty(); 判断容器是否为空
size(); 返回容器中元素的个数
resize(int num); 重新指定容器的长度为num,若容器变长,则以默认值填充新位置
若容器变短,则末尾超出容器长度的元素被删除
resize(int num, elem); 重新指定容器的长度为num,若容器变长,则以elem值填充新位置
若容器变短,则末尾超出容器长度的元素被删除
*/
void ltest03()
{
list<int> L1;
L1.push_back(10);
L1.push_back(20);
L1.push_back(30);
L1.push_back(40);
printList(L1);
if (L1.empty())
{
cout << "空" << endl;
}
int size = L1.size();
cout << "大小:" << size << endl;
L1.resize(15);
printList(L1);
L1.resize(20, 20);
printList(L1);
}
//四、插入和删除
/*
push_back(elem); 在容器尾部加入一个元素
pop_back(); 删除容器中最后一个元素
push_front(elem); 在容器开头插入一个元素
pop_front(); 从容器开头移除第一个元素
insert(pos, elem); 在pos位置插入elem元素的拷贝,返回新数据的位置
insert(pos, n, elem); 在pos位置插入n歌elem数据,没有返回值
insert(pos, beg, end); 在pos位置插入[beg, end)区间的数据,没有返回值
clear(); 移除容器所有数据
erase(beg, end); 删除[beg,end)位置的数据,返回下一个数据的位置
erase(pos); 删除pos位置的数据,返回下一个数据的位置
remove(elem); 删除容器中所有与elem值相匹配的元素
*/
void ltest04()
{
list<int> L1;
L1.push_back(10);
L1.push_back(20);
L1.push_back(30);
L1.push_front(100);
L1.push_front(200);
L1.push_front(300);
printList(L1);
//尾删
L1.pop_back();
printList(L1);
//头删
L1.pop_front();
printList(L1);
//插入
list<int>::iterator it = L1.begin();
L1.insert(++it, 1000);
printList(L1);
L1.insert(L1.begin(), 2, 2000);
printList(L1);
list<int> L2;
L2.push_back(10);
L2.push_back(20);
L2.push_back(30);
L1.insert(L1.begin(), L2.begin(), L2.end());
printList(L1);
//删除
it = L1.begin();
L1.erase(++it);
printList(L1);
//移除
L1.push_back(10000);
printList(L1);
L1.remove(10000);
printList(L1);
}
//五、数据存取
/*
对list容器中数据进行存取
front(); 返回第一个元素
back(); 返回最后一个元素
*/
void ltest05()
{
list<int> L1;
L1.push_back(10);
L1.push_back(20);
L1.push_back(30);
L1.push_front(100);
L1.push_front(200);
L1.push_front(300);
printList(L1);
int front = L1.front();
int back = L1.back();
cout << front << back << endl;
list<int>::iterator it = L1.begin();
it++;
it--;//支持双向
cout << *it << endl;
}
//六、反转和排序
/*
将容器中的元素反转,以及将容器中的数据进行排序
reverse(); 反转链表
sort(); 链表排序
*/
bool myCompare(int a, int b)
{
//降序排序
return a > b;
}
void ltest06()
{
list<int> L1;
L1.push_back(10);
L1.push_back(20);
L1.push_back(30);
L1.push_front(100);
L1.push_front(200);
L1.push_front(300);
printList(L1);
L1.reverse();
printList(L1);
L1.sort();//默认从小到大升序排序
printList(L1);
L1.sort(myCompare);//降序排列
printList(L1);
}
int main_list()
{
ltest06();
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下