文章目录
1、list的概念
list是带头结点的循环双向链表,是可以在常数范围内在任意位置进行插入和删除的序列式容器。
2、list的使用
list中的接口比较多,只需要掌握如何正确的使用,然后再去深入研究背后的原理,已达到可扩展的能力。以下为list中一些常见的重要接口。
2.1 list的构造
#include <iostream>
#include <list>
int main()
{
std::list<int> l1;// 构造空的l1
std::list<int> l2(4,100);// l2中放4个值为100的元素
std::list<int> l3(l2.begin(),l2.end());// 用l2的[begin(), end())左闭右开的区间构造l3
std::list<int> l4(l3);// 用l3拷贝构造l4
// 以数组为迭代器区间构造l5
int array[] = {
16,2,77,29};
std::list<int>l5(array,array+sizeof(array)/sizeof(int));
// 用迭代器方式打印l5中的元素
for(std::list<int>::iterator it = l5.begin();it!=l5.end();it++)
std::cout<<*it<<" ";
std::cout<<endl;
// C++11范围for的方式遍历
for(auto& e:l5)
std::cout<<e<<" ";
std::cout<<endl;
return 0;
}
2.2 list迭代器的使用
begin与end为正向迭代器,对迭代器执行++操作,迭代器向后移动; rbegin(end)与rend(begin)为反向迭代器,对迭代器执行++操作,迭代器向前移动。
#include <iostream>
using namespace std;
#include <list>
int main()
{
int array[]={
1,2,3,4,5,6,7,8,9,0};
list<int> l(array,array + sizeof(array) / sizeof(array[0]));
// 使用正向迭代器正向list中的元素
for(list<int>::iterator it = l.begin();it != l.end();++it)
cout<<*it<<" ";
cout<<endl;
// 使用反向迭代器逆向打印list中的元素
for(list<int>::reverse_iterator it = l.rbegin();it !=l.rend();++it)
cout<<*it<<" ";
cout<<endl;
return 0;
}
2.3 list节点个数
l.empty()//检测list是否为空,是返回true,否则返回false
l.size()//返回list中有效节点的个数
2.4 list元素访问
l.front()//返回list的第一个节点中值的引用
l.back()//返回list的最后一个节点中值的引用
2.5 list元素修改
#include <list>
void PrintList(list<int>& l)
{
for(auto& e:l)
cout<<e<<" ";
cout<<endl;
}
void TestList1()
{
int array[] = {
1,2,3};
list<int> L(array,array+sizeof(array)/sizeof(array[0]));
// 在list的尾部插入4,头部插入0
L.push_back(4);
L.push_front(0);
PrintList(L);
//删除list尾部节点和头部节点
L.pop_back();
L.pop_front();
PrintList(L);
}
void TestList2()
{
int array1[] = {
1,2,3};
list<int> L(array1,array1+sizeof(array1)