目录
底层实现是一个双链表,它的插入与删除操作时间复杂度为o(1)。
list的迭代器是双向迭代器,允许++--操作,
像string、vector容器是随机迭代器,允许++--+-操作,
像forwad_list是随机迭代器,只允许++操作
list的使用:
list容器提供的许多的接口,如:
list构造函数:
n个val构造:
#include<iostream>
#include<list>
using namespace std;
int main()
{
list<int>i1(10, 1);
for (auto x:i1)//输出10个1
{
cout << x << " ";
}
return 0;
}
空构造:
#include<iostream>
#include<list>
using namespace std;
int main()
{
list<int>i1;
return 0;
}
拷贝构造:
#include<iostream>
#include<list>
using namespace std;
int main()
{
list<int>i1;
return 0;
}
迭代器区间构造:
#include<iostream>
#include<list>
using namespace std;
int main()
{
list<int>i1 = {1,2,3,4,5,6};
list<int>i2(i1.begin(),i1.end());
for (auto x:i2)
{
cout << x << " ";
}
return 0;
}
list迭代器使用:
迭代器这里可以暂时理解为指针,像指针一样指向list的节点
begin(),end()迭代器:
//正向迭代器
list<int>i1 = {1,2,3,4,5,6};
list<int>::iterator it1 = i1.begin();
while (it1!=i1.end())
{
cout << *it1 << " ";
++it1;
}
rbegin(),rend()迭代器:
/*除了forward_list容器之外,其他容器都支持反向迭代器
反向迭代器
1.定义:
在容器中从尾元素向首元素反向移动的迭代器
对于反向迭代器,递增和递减的含义会颠倒过来
递增一个反向迭代器会移动到前一个元素
递减一个迭代器会移动到下一个元素*/
----------------------------------
/*
rbegin(),指向一组元素的最后一个元素的位置
rend(),指向第一个元素的前一个位置
*/
list<int>i1 = { 1,2,3,4,5,6 };
for (auto it=i1.rbegin();it!=i1.rend();it++)
{
cout << *it << " ";
}
---------------------------------
list<int>i1 = {1,2,3,4,5,6};
list<int>::reverse_iterator it1 = i1.rbegin();
while (it1!=i1.rend())
{
cout << *it1 << " ";
++it1;
}
list常用接口:
empty():
list<int>i1 = {1,2,3,4,5};
if (i1.empty())
{
cout << "true" << endl;
}
else
{
cout << "0" << endl;
}
//返回list中有效节点个数
list<int>i1 = {1,2,3,4,5};
cout << i1.size() << endl;
//返回list第一个元素值的引用
list<int>i1 = {1,2,3,4,5};
cout << i1.front() << endl;
//返回list最后一个元素值的引用
list<int>i1 = {1,2,3,4,5};
cout << i1.back() << endl;
//insert
/*
在迭代器位置插入一个值
在迭代器位置插入n个值
在迭代器位置插入一个迭代器区间的值
*/
迭代器失效:
对于vector,迭代器失效是当vector进行扩容是,原迭代器还指向就空间的位置,没有更新,所以导致失效,如果像正常访问这个迭代器,就需要更新一下迭代器的位置