list相当于双向链表,所以快插快删比较方便(链式数据结构的性质),但是随机读取较慢
用一道luogu的水题做一做list,code如下
1 #include <cstdio>
2 #include <list>
3
4 using namespace std;
5
6 list<int>line;
7 int n,k;
8
9 int main(int argc, char const *argv[]){
10 scanf("%d",&n);
11 for (int i = 0; i < n; ++i){
12 scanf("%d",&k);
13 line.push_back(k);
14 }
15 line.sort();
16 line.unique();
17 printf("%d\n", line.size());
18 for (std::list<int>::iterator i = line.begin(); i != line.end(); ++i){
19 printf("%d ", *i);
20 }
21 return 0;
22 }
需要注意的是实现list的unique时,一定要先sort,否则不行。
list的sort默认从小到大排序,如果要从大到小排序的话,写个算子或者include一下functional,如下写法:
1 line.sort(greater<int>() );
当然也可以用曲线救国的骚操作:
1 line.sort();
2 line.unique();
3 line.reverse();
reverse对list中的元素进行反转。
----------------------------------------------------------------------------------------------------------------------------------
除了上述操作,还有:
line.clear(); 清空链表
line.empty(); 返回bool:链表是否为空
别的就差不多了吧,begin() front() push_front(k) size()等等都是很常用的