1.STL的全称为:Standard Template Library
2.STL中文名为标准模板库
3.STL是c++标准库的一部分,是以源代码的形式提供的
4.STL体现了泛型编程的思想 (可以对不同的数据类型进行操作)
5.STL的头文件都不加扩展名,并且需要打开std命名空间
1.容器
2.迭代器
3.算法
4.容器适配器
5.空间分配器
6.仿函数
元素保持了在容器中的原始位置,允许指定位置插入、删除,每个元素都有固定的位置,取决于插入的时间、地点,与元素的值无关 例如 list容器
元素的位置取决于容器的特定排序规则,一般与元素的值有关 例如map容器
list在任一一个位置增加删除元素效率都不变 时间复杂度为O(1)
但是查找效率为O(n)
#include
using namespace std;//需要打开std命名空间
list //创建链表
list lst(5);//创建链表 并指定链表长度
list lst(5,4);//指定链表长度,且指定了初始化
list lst{ 1,2,3,4,5 };//使用初始化列表 进行显示的指定
list lst.remove(2);//将链表中值为2的节点移除
lst.unique();
list::iterator ite = lst.begin();
while (ite != lst.end()) {//lst.end()是一个无效节点,是有效节点的下一个
cout << *ite << " ";
ite++;
}
for (int v : lst) cout << v << " ";
//第一种
list lst2{ 2,8,6,4,7,9,1 };
lst2.sort();//默认升序
for (int v : lst2) cout << v << " ";//遍历一下
//第二种
bool rule_asc(int a, int b) {
return a < b;
}
lst2.sort(&rule_asc);//指定规则:升序
for (int v : lst2) cout << v << " ";//遍历一下
//第三种
lst2.sort(less<>());//升序,用写好的升序规则
for (int v : lst2) cout << v << " ";//遍历一下
//第一种
bool rule_desc(int a,int b) {
return a > b;
}
lst2.sort(&rule_desc);//指定规则:降序
for (int v : lst2) cout << v << " ";//遍历一下
//第二种
lst2.sort(greater<>());//降序,用写好的降序规则
for (int v : lst2) cout << v << " ";//遍历一下
lst2.reverse();
list lst3{ 5,2,0 };
list::iterator ite = lst2.begin();//迭代器找位置
::advance(ite, 3);//迭代器做偏移,支持正向,反向偏移
//第一种方式
lst2.splice(ite, lst3);//剪切,第一个参数是位置(被剪切的链表要插入到这个位置之前),第二个参数是被剪切的链表
for (int v : lst2) cout << v << " ";//遍历一下
//第二种方式
lst2.splice(ite, lst3, lst3.begin());//剪切 某一个节点
for (int v : lst2) cout << v << " ";//遍历一下
//第三种方式
lst2.splice(ite, lst3, lst3.begin(),--lst3.end());//剪切 某一段链表中的节点
for (int v : lst2) cout << v << " ";//遍历一下
//合并后升序
lst2.sort();
lst3.sort();
lst2.merge(lst3);//合并,合并完是升序
for (int v : lst2) cout << v << " ";//遍历一下
//合并后降序
lst2.sort(greater<>());
lst3.sort(greater<>());
lst2.merge(lst3,greater<>());//合并,合并完是升序,所以进行一个降序规则的指定
for (int v : lst2) cout << v << " ";//遍历一下
lst2.swap(lst3);//交换
for (int v : lst2) cout << v << " ";//遍历一下
for (int v : lst3) cout << v << " ";//遍历一下