STL::list
list: 是一个双向链表。和 forward_list(单向链表)相似。
Constructor(同 vector 相似)
default:
fill:
range:
copy:
move:
initializer list:
Iterator(同 vector)
begin:
end:
rbegin:
rend:
cbegin:
cend:
crbegin:
crend:
Capacity
empty:
size:
max_size:
Element access(同 vector 类似)
front:
back:
Modifiers
assign: 重新赋予 list 的内容(用法同 vector::assign),三种方式:range; fill; initializer list;
emplace(c++11):
emplace_front(c++11):
emplace_back(c++11):
push_front:
pop_front:
push_back:
pop_back:
insert: 是在对于的迭代器之前插入(这是 STL 对于插入操作的基本规范)
erase: 范围擦除 [first,last);同 vector::erase;
swap:
resize:
clear:
Operations
splice: 从一个容器中的元素转运(非复制)到到另一个容器中;三种用法:entire list; single element; element range;
remove: 通过值来移除元素(erase 通过位置(iterator)移除元素);改变容器的 size;
remove_if: 参数要么是一个函数指针,要么是一个函数对象,函数为一个返回值是 bool 的函数,该函数调用容器中的每一个元素,移除使函数返回值为 true 的元素。
unique:删除重复元素,也可以传入函数或者类对象,进行扩展相等性的判断。
merge:有序合并两个链表(两个链表已经各自有序,按照当前排序进行转运元素(非复制)),也可以指定 cmp 函数进行比较规则的自定义。(list::splice 无序的合并操作)
sort: 排序,默认顺序为升序排列,可以传入函数名(函数指针),函数返回值为 bool 型。以返回值为 true 的顺序排列,是一个稳定排序(相同元素的相对位置不会发生变化)。
reverse: 将容器内的元素顺序翻转。
补充:strict weak sorting:严格弱排序,严格是说在判断的时候会用 “<” 而不是 “<=”,弱排序是因为,一旦 “<” 成立便认为存在 “<” 关系,返回 ture, 而忽略了 “=” 关系和 “>” 的区别,把它们归结为 false 。 referce-->https://blog.csdn.net/xingliang_liu/article/details/3855390
==============STL源码剖析进行部分补充:================
SGI STL 不仅是一个双向链表,而且还是一个环状双向链表。所以它只需要一个指针,便可以完整表现整个链表。如果让指针 node 指向刻意置于尾端的一个空白节点,node 便能符合 STL 对于“前闭后开”区间的要求,成为 last 迭代器。示意图如下:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗