前言
本文主要记录、整理、回顾在算法考试中常用的一些库函数,技巧等,不断更新中~
list
常用方法
在一般c++编程中,对于数组这样的数据结构,一般都使用vector居多,貌似list用的很少。但实际list也十分强大,是STL 中的双向链表容器,特别是适用于一些频繁插入的一些操作。
使用案例:leetcode 56.合并区间
1. 初始化和构造
-
list<int> lst;
默认构造函数,创建一个空链表。 -
list<int> lst(n, value);
使用给定值value
初始化链表,链表包含n
个元素。 -
list<int> lst(first, last);
通过两个迭代器区间[first, last)
初始化链表。 -
list<int> lst(lst2);
使用另一个list
拷贝构造一个新的链表。
2. 基本操作
-
lst.size();
返回链表中元素的个数。 -
lst.empty();
检查链表是否为空,如果为空返回true
,否则返回false
。 -
lst.clear();
清空链表,删除所有元素。 -
lst.front();
返回链表的第一个元素。 -
lst.back();
返回链表的最后一个元素。
3. 元素访问与修改
-
lst.push_front(value);
在链表的前面插入元素value
。 -
lst.push_back(value);
在链表的末尾插入元素value
。 -
lst.pop_front();
删除链表的第一个元素。 -
lst.pop_back();
删除链表的最后一个元素。 -
lst.insert(it, value);
在迭代器it
所指向位置之前插入元素value
。 -
lst.erase(it);
删除迭代器it
所指向的元素。 -
lst.erase(first, last);
删除从first
到last
范围的元素。
4. 查找与修改
-
lst.find(value);
查找链表中第一次出现的元素value
,返回指向该元素的迭代器,如果没有找到返回lst.end()
。 -
lst.remove(value);
删除链表中所有值为value
的元素。 -
lst.remove_if(pred);
删除满足谓词pred
的所有元素。 -
lst.reverse();
反转链表中的元素顺序。 -
lst.sort();
对链表中的元素进行排序。 -
lst.unique();
删除链表中相邻的重复元素。
5. 拼接与操作
-
lst.splice(it, lst2);
将lst2
中的所有元素插入到lst
中,插入位置在迭代器it
指向的位置之前。lst2
会变为空。 -
lst.splice(it, lst2, it2);
将lst2
中it2
指向的元素插入到lst
中,插入位置是迭代器it
指向的位置之前。 -
lst.splice(it, lst2, first, last);
将lst2
中的从first
到last
范围的元素插入到lst
中,插入位置是迭代器it
指向的位置之前。
6. 迭代器操作
-
lst.begin();
返回指向链表第一个元素的迭代器。 -
lst.end();
返回指向链表末尾(一个越界位置)的迭代器。 -
lst.rbegin();
返回指向链表最后一个元素的反向迭代器。 -
lst.rend();
返回指向链表头部之前的一个反向迭代器。 -
advance(it, n);
让迭代器it
向前移动n
步。 -
it = lst.insert(it, value);
在迭代器it
指向的位置插入元素value
,返回插入元素的新位置。
7. 其他辅助方法
-
lst.resize(n);
调整链表的大小,如果n
小于当前大小,链表会被截断;如果大于当前大小,会插入默认值。 -
lst.resize(n, value);
调整链表的大小,并使用value
填充新增的元素。
持续补充更新中~