您的位置:首页 > 其它

STL list双向链表容器

2016-04-29 08:53 211 查看
list双向链表容器

list的定义

list的头文件:#include<list>

【list的优点】

list容器实现了双向链表的数据结构,数据元素时通过链表指针串连成逻辑意义上的线性表,list可以对任一位置的元素进行极快速插入、删除和查找。

【list的插入注意】

list对象的节点并不要求在一段连续的内存中,所以,对于迭代器,只能通过“++”或“--”的操作将迭代器移动到插入位置处,不能对迭代器进行+n或-n操作

【list的函数】

list<int>l;

1. l.push_back(x) 往尾部插入元素x,链表自动扩张

2. l.push_front(x) 往首部插入元素x,链表自动扩张

3. l.insert(it,x) 往迭代器位置it处插入元素x,链表自动扩张,list中间插入和其他容器略有不同,

it只能通过“++”或“--”移动到想插入位置,详情请看下面代码

4. l.remove(x) 删除值等于x的所以元素

5. l.pop_front() 删除链表首元素

6. l.pop_back() 删除链表尾元素

7. l.erase(it) 通过迭代器位置it删除元素,还是it只能通过“++”或“--”得到

8. l.unique() 剔除连续重复元素,值保留一个

9. l.sort() 对链表元素进行升序排序

【list的基本操作】

1.插入、删除

#include<list>
#include<iostream>
using namespace std;
int main()
{
list<int>l;
// 首部插入push_front()
l.push_front(5);
l.push_front(2);
l.push_front(1);
// 尾部插入push_back()
l.push_back(5);
l.push_back(2);
l.push_back(1);
list<int>::iterator it;
// insert()往迭代器中插入元素时,迭代器只能进行"++"或"--"操作,不能进行+n或-n操作
it=l.begin();
for(int i=0;i<3;i++)
it++;
// 中间插入insert(x,y) x表示迭代器的位置,y表示插入的数据
l.insert(it,20);
for(it=l.begin();it!=l.end();it++)
cout<<*it<<" ";
cout<<endl;
list<int>::reverse_iterator rit;
for(rit=l.rbegin();rit!=l.rend();rit++)

cout<<*rit<<" ";
cout<<endl;
// remove()删除链表中的一个元素,值相同都会被删除
l.remove(1);
for(it=l.begin();it!=l.end();it++)
cout<<*it<<" ";
cout<<endl;
// push_front首部删除
l.pop_front();
// push_back尾部删除
l.pop_back();
for(it=l.begin();it!=l.end();it++)
cout<<*it<<" ";
cout<<endl;
// 迭代器只能进行"++"或"--"操作,不能进行+n或-n操作
it=l.begin();
it++;
// erase()删除迭代器位置上的元素
l.erase(it);
for(it=l.begin();it!=l.end();it++)
cout<<*it<<" ";
cout<<endl;
// clear()清空链表
l.clear();
cout<<l.size()<<endl;
return 0;
}


2.查找、剔除、排序

#include<list>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
list<int>l,h(3,4);
l.push_front(5);
l.push_front(2);
l.push_front(1);
l.push_back(5);
l.push_back(5);
l.push_back(2);
l.push_back(1);
list<int>::iterator it;
for(it=l.begin();it!=l.end();it++)
cout<<*it<<" ";
cout<<endl;
// find()查找在list中需要用到算法头文件
// 采用find()查找算法在链表中查找,找到返回该元素的迭代器位置,否则返回end()迭代器位置
/* list容器查找和之前学的查找不同,应注意其格式 */
it=find(l.begin(),l.end(),5);
if(it!=l.end())
cout<<"find it"<<endl;
else
cout<<"not find it"<<endl;
// 使用sort()方法对链表排序,sort排序是升序
l.sort();
for(it=l.begin();it!=l.end();it++)
cout<<*it<<" ";
cout<<endl;
// 剔除连续重复元素(只保留一个)
l.unique();
for(it=l.begin();it!=l.end();it++)
cout<<*it<<" ";
cout<<endl;
// merge :合并两个list类型的容器
l.merge(h);
for(it=l.begin();it!=l.end();it++)
cout<<*it<<" ";
cout<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: