前言
本文主要记录、整理、回顾在算法考试中常用的一些库函数,技巧等,不断更新中~
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
填充新增的元素。
持续补充更新中~