算法常用库函数——C++篇

发布于:2025-02-11 ⋅ 阅读:(103) ⋅ 点赞:(0)

前言

本文主要记录、整理、回顾在算法考试中常用的一些库函数,技巧等,不断更新中~

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); 删除从 firstlast 范围的元素。

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);lst2it2 指向的元素插入到 lst 中,插入位置是迭代器 it 指向的位置之前。

  • lst.splice(it, lst2, first, last);lst2 中的从 firstlast 范围的元素插入到 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 填充新增的元素。

持续补充更新中~


网站公告

今日签到

点亮在社区的每一天
去签到