STL容器主要分两大类:
序列性容器:
关联性容器:
STL链表list
STL链表特点:
list模型图
#include < list >using namespace std ;
list定义:
list<int> lst;
list<int> lst1(3); //构建了指定长度的链表,并且有默认的初始值
list<int> lst2(3,4); //构建了指定长度的链表,手动指定初始值
list<int> lst3{ 2,3,4 }; //使用初始化列表构建链表
list的一些常用函数:
begin()
获取头结点的迭代器。
end()
获取尾节点的下一个无效节点的迭代器。
list<int> list;
list.push_back(1);
list.push_back(2);
list.push_back(3);
list.push_back(4);
list.push_back(5);
//cout << *(list.end()) << endl;//报错因为end()代表的是尾结点的下一个无效节点的迭代器
cout << *(--list.end()) << endl;// 5cout << *(list.begin()) << endl;// 1
front()
返回头结点里的值。
back()
返回尾结点里的值。
clear()
清空链表。
size()
返回链表的长度、元素的数量。
bool empty()
链表是否为空。
erase()
删除指定迭代器位置的节点,返回的是删除节点的下一个节点的迭代器。
insert()
指定迭代器位置插入一个元素,返回的是插入的元素的迭代器。
push_back()、push_front()、pop_back()、pop_front()
链表头尾添加、删除。
remove(const Type& _Val )
将值为val的所有节点删除。
lst.remove(4); //将值为4的所有节点移除
unique()
将连续而相同的节点移除只剩一个。
for (int v : lst) {
cout << v << " ";//1 3 2 1 3 0 0 0 2
}lst.unique(); //连续且相同的节点 移除只剩下一个
for (int v : lst) {
cout << v << " ";//1 3 2 1 3 0 2
}
reverse()
链表进行翻转。
lst2.reverse(); //反转链表
swap( list& Right );
交换两个链表。
lst2.swap( lst3 ); //交换
sort()
对链表元素进行排序,默认升序。
如果要指定排序规则,需要指定排序规则函数。
bool func(Type,Type); 或 greater() 降序,less() 升序。
lst.sort(); //默认升序
lst.sort( greater<int>() ); //greater: 降序
lst.sort( less<int>() ); //less: 升序
splice(iterator Where, list& Right)
将 Right 链表整个结合到另一个链表where位置之前,这是 一个“剪切”操作,Right 链表将为空。 splice(iterator Where,list& Right,iterator First):将Right链表的First位置节点结合到 this 链表的where位置之前,这是一个“剪切”操作。this 和 Right 可以为同一个链表。splice(iterator Where,list& Right,iterator First,iterator Last):将Right链表的First位置到Last位置的一段元素[First,Last),不包含Last,结合到this链表的where位置之前,这是一个“剪切”操作。this 和 Right 可以为同一个链表,但 Where不能位于[First,Last) 内。
merge(list& Right, Traits Comp)
将 Right 链表合并到this链表上, this 和 Right 必须经过排序,两者或都为递增、或都为递减,Comp 描述了递增合并还是递减合并,bool func(Type,Type); 或greater() 降序,less() 升序。这是一个“剪切” 操作,Right 将为空链表。