目录
1.定义
list是C++ stl中的部分内容,本质上list容器就是一个双向链表,可以高效的插入删除元素。使用的时候需要添加头文件#include<list>
2.基本函数
2.1.构造函数
- std::list<int> li:创建一个空的list
- std::list<int> li{1,2,3}:创建一个有元素1,2,3的list
- std::list<int> li(20):创建一个有20个元素0的list
- std::list<int> li(20,2):创建一个有20个元素2的list
- std::list<int> li1(li):创建一个和li相同的list
- std::list<int> li2(li1.begin(),li2.end()):创建一个有[begin(),end{}]之间元素的list
2.2.添加元素
注意在list中不可以使用下表访问,list中间的元素不可以随意访问
- li.push_back(2):在结尾添加元素2
- li.push_front(2):在开头添加元素2
- li.insert(li.begin(),2):在开头添加元素2(注意不可以在pos的位置使用li.begin()+n
- li.insert(li.begin(),2,3):在开头添加2个元素3
- li.insert(li.begin(),li1.begin(),li1.end()):在开头添加[begin(),end()]之间的元素
2.3.删除元素
- li.pop_back():删除结尾的一个元素
- li.pop_front():删除开头的一个元素
- li.erase(li.begin()):删除开头的一个元素
- li.clear():删除li中所有元素
2.4.list重要的迭代器
- ve.begin():返回正向迭代器的第一个元素
- ve.end():返回正向迭代器的最后一个元素的下一个位置
- ve.rbegin():返回反向迭代器的第一个元素,即vector中的最后一个元素
- ve.rend():返回反向迭代器的最后一个元素的下一个位置,即vector中的第一个元素的前一个位置
- ve.front():返回vector开头一个元素的引用
- ve.back():返回vector最末一个元素的引用
2.5.list其他函数
- li.empty():判断list是否为空
- li.size():list中元素个数
3.list使用实例
- 将两个有序的list组合成一个有序的list(默认是升序的,注意使用的list一定是有序的,否则会报sequence not ordered)
#include <numeric>
#include<iostream>
#include<list>
void main(){
std::list<int> a1{ 1, 3, 5 }, a2{ 2, 4, 6 };
a1.merge(a2);
std::list<int>::iterator it;
std::cout << "a1.merge(a2):";
for (it = a1.begin(); it != a1.end(); it++){
std::cout << *it << " ";
}
std::cout << std::endl;
}
也可以将有序定为自己想用的
#include <numeric>
#include<iostream>
#include<list>
void main(){
std::list<int> a1{ 5, 3, 1 }, a2{ 6, 4, 2 };
a1.merge(a1, [](int n1, int n2){return n1>n2; });
std::list<int>::iterator it;
std::cout << "a1.merge(a2):";
for (it = a1.begin(); it != a1.end(); it++){
std::cout << *it << " ";
}
std::cout << std::endl;
}
- 将两个list连接起来——a1.splice(a1.begin(),a2);,将a2整个放在a1之前,释放a2
#include <numeric>
#include<iostream>
#include<list>
void main(){
std::list<int> a1{ 5, 3, 1 }, a2{ 6, 4, 2 };
std::list<int>::iterator it;
a1.splice(a1.begin(),a2);
std::cout << "a1.splice(a1.begin(),a2):";
for (it = a1.begin(); it != a1.end(); it++){
std::cout << *it << " ";
}
std::cout << std::endl;
}
a1.splice(a1.begin(), a2, a2.begin())——将a2的begin()位置的元素连接到a1的begin()位置,并且在a2中施放掉begin()位置的元素
#include <numeric>
#include<iostream>
#include<list>
void main(){
std::list<int> a1{ 5, 3, 1 }, a2{ 6, 4, 2 };
std::list<int>::iterator it;
a1.splice(a1.begin(), a2, a2.begin());
std::cout << "a1.splice(a1.begin(),a2):";
for (it = a1.begin(); it != a1.end(); it++){
std::cout << *it << " ";
}
std::cout << std::endl;
}
- remove()——删除一个元素
#include <numeric>
#include<iostream>
#include<list>
void main(){
std::list<int> a1{ 1, 2, 3, 4, 5 };
a1.remove(3);
std::list<int>::iterator it;
std::cout << "remove():";
for (it = a1.begin(); it != a1.end(); it++){
std::cout << *it << " ";
}
std::cout << std::endl;
}
也可以自定义删除元素的范围
#include <numeric>
#include<iostream>
#include<list>
void main(){
std::list<int> a1{ 1, 2, 3, 4, 5 };
a1.remove_if([](int n){return n<3; });
std::list<int>::iterator it;
std::cout << "remove():";
for (it = a1.begin(); it != a1.end(); it++){
std::cout << *it << " ";
}
std::cout << std::endl;
}