关于C++STL库 list 的相关使用方法

本文介绍了C++标准库中的std::list双向链表及其常用成员函数,如迭代器操作、插入、删除、排序和去重。并通过实例演示如何在队列安排问题中使用list进行操作,并提供了AC代码片段。
摘要由CSDN通过智能技术生成

 事先声明: 本人纯小白 如有错误 敬请各位大佬指正

C++ 标准库自带了 std::list 这样一个双向链表 ,在日常写题过程中可以很方便的使用 (主要是懒) (xiao

关于 list 自带的一个一些 常用成员函数:

首先list <类型> ::iterator 是一个list类型的迭代器(相当于指针,用来遍历表十分方便)

begin() 第一个元素的迭代器

end() 最后一个元素后面一个位置的迭代器(不指向最后一个元素)

push_back(值); 把值插入到表尾

push_front(值);把值插入到表头

pop_back();删除表尾元素

pop_front();删除表头元素

insert(迭代器,值); 在迭代器的前一个位置插入值

erase(迭代器); 删除该迭代器指向的元素(注意:删除之前需判断该元素是否存在或者之前已经被删除过了(后面会讲))

特别的:

list 还有一些特殊的成员函数

sort() 这个sort是成员函数 按升序排列 (注意:sort(mylist.begin(),mylist.end())) 是错误写法

unique() 去重函数 使用规则同上


list 遍历的两种方式

//list 的两种遍历方法 个人还是喜欢后一种 因为比较短 但后一种也有缺陷
 #include<list>
 using namespace std;
 ​
 list<int> mylist; //初始化链表
 ​
 //通过迭代器遍历链表
 for(auto it =mylist.begin();it!=mylist.end();it++)
     cout<<*it<<" ";
 ​
 //通过智能指针遍历链表 C++11特性
 for(auto &x :mylist)
     cout<<x<<" ";
 ​

练习:

P1160 队列安排 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

AC 代码:

 #include <iostream>
 #include <cstring>
 #include <algorithm>
 #include <list>
 using namespace std;
 const int N =1e5+10;
 list <int > l;
 list<int> ::iterator pos[N]; //存放第 k元素插入的位置
 int n,m;
 bool erz[N];
 ​
 int main()
 {
     ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); //C++ 输入输出加速
     cin>>n;
     l.push_front(1); //首先放入第一个元素
     pos[1]=l.begin(); //放入第一个元素
     for(int i=2;i<=n;i++){
         int k,p;cin>>k>>p;
 ​        // insert() 默认会在迭代器左边插入
         if(p==1) pos[i]=l.insert(next(pos[k]),i); //在第k个元素右边插入
         else pos[i]=l.insert(pos[k],i); //在第k元素左边插入
     }
     cin>>m;
     while(m--){ //删除操作
        int k;cin>>k;
         if(!erz[k]){ //判断这个元素有没有删除 若已经删除就不删除了
             l.erase(pos[k]);
             erz[k]=true;
         }
     }
     
     for(auto &y:l){ //最后打印输出整个链表
         cout<<y<<" ";
     }
     
     return 0;
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值