目录
- list的定义
- list的常用函数
- 代码示例
1.list的定义
list的使用频率不高,而且可以用数组模拟链表,因此对本节的要求是会用就行。
list的用法于vector类似,例:list<int> ;
2.list的常用函数
14.unique():从链表中找出重复的元素并移到链表的后面
具体解析见代码示例。
3.代码示例:
代码示例1:
这份示例比较常规,和vector用法类似。
//示例代码1
#include<bits/stdc++.h>
using namespace std;
int main()
{
list<int> m;
for(int i=0;i<5;i++)
{
m.push_back(i+100);
}
for(auto &i:m)
{
cout<<" "<<i;
}
cout<<endl;
list<int> n;
for(int i=0;i<5;i++)
{
n.push_front(i+100);
}
for(auto &i:n)
{
cout<<" "<<i;
}
cout<<endl;
n.pop_back();
n.pop_front();
for(auto &i:n)
{
cout<<" "<<i;
}
cout<<endl<<"m链表的个数为:"<<m.size()<<endl;
cout<<m.front()+1<<endl;//返回链表第一个元素的引用,即返回链表第一个元素
reverse(m.begin(),m.end());
for(auto &i:m)
{
cout<<" "<<i;
}
cout<<endl;
}
运行结果:
代码示例2:
erase (b,e)依旧是左闭右开原则,e应当指向希望删除的最后一个元素之后的位置。因此可以看到在这段代码中还保留了一个101,是因为101的这个位置是不会被擦除的。
此外,还需要留意的是list作为链表是不紧密的,因此不能使用v.begin()+2这样的方式进行,应该使用++ ++v.begin()的方式。
//示例代码2,对比vector和list中对迭代器的使用区别
/*
vector容器:直接v.begin()+n
list容器:++ ++ ++v.begin()
因为list容器数据与数据之间是通过指针连接的,是不紧密的
*/
#include<bits/stdc++.h>
using namespace std;
int main()
{
list<int> t;
for(int i=0;i<7;i++)
{
t.push_back(i+100);
}
for(auto &k:t)
{
cout<<k<<" ";
}
cout<<endl;
//插入
t.insert(++t.begin(),101);//别忘了t.begin()
t.insert(++ ++t.begin(),101);
t.insert(++ ++ ++t.begin(),101);
for(auto &k:t)
{
cout<<k<<" ";
}
cout<<endl;
t.erase(++t.begin(),++ ++ ++ ++t.begin());//范围是左闭右开
for(auto &k:t)
{
cout<<k<<" ";
}
cout<<endl;
}
运行结果: