1 条题解
-
0
此题要求模拟链表结构。 但是因为允许使用C本身的链表STL类,那么拿过来用是最便捷快速的办法,不要自己去实现。 (正因如此,比赛也不可能出这种题)
由于不考察性能(数据量很小),所有STL容器类都可以实现此题要求,熟悉哪种用哪种。
对于STL容器,需要熟悉iterator迭代器来定位,这东西听起来挺 吓人,翻译成游标是不是就亲切多了?
因为支持游标,可以很方便定位在需要的位置,进行增删改操作。
注意find是std下的全局方法。不是容器方法。
vector:内部实现为动态数组 deque:双头链表,内部为链表 list:列表,除了内部为链表,它和vector基本一样 (不知为何,其游标不支持不等比较 cursor>list.end())
#include <bits/stdc++.h> using namespace std; #define find_x_on_vec find(vec.begin(),vec.end(),x) //纯粹为了卷面简洁 int main(){ vector<int> vec = {1}; int n,type,x,y; cin>>n; auto p=vec.begin(); //迭代器,也可以理解为指针 for (int i=0;i<n;i++){ cin>>type; //出乎意料type居然不是C家的保留字 if (type==1){ cin>>x>>y; p=find_x_on_vec; vec.insert(++p,y); }else if (type==2){ cin>>x; p=find_x_on_vec; //如果x不是最后一个元素?输出后续元素:输出0; //考虑到有可能根本找不到x(此时游标在 //vec.end()上,vec.end()不是指向最后一个元素,而 //是最后一个元素之后),比较最好用<号而不是==号 cout<<(p<(vec.end()-1)?*(++p):0)<<endl; }else{ cin>>x; p=find_x_on_vec; if (p<vec.end()-1) vec.erase(++p); } } return 0; }
- 1
信息
- ID
- 7485
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 2
- 标签
- 递交数
- 57
- 已通过
- 9
- 上传者