前言
本文重要记载、整理、回顾在算法考试中常用的一些库函数,技巧等,不停更新中~
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 添补新增的元素。
一连补充更新中~
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |