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.插入、删除
2.查找、剔除、排序
【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; }
相关文章推荐
- 053(五十三)
- 简单学习Python time模块
- mysql安装教程
- mybatis中0和null关系处理
- MySQL触发器使用详解
- 贪小便宜吃大亏关于汇泽平板和智能手表
- Tab实现之ViewPager(一)
- c#sqlhelper之用法
- Linux系统启动流程及内核编译(2)
- MFC选择目录SHBrowseForFolder
- iOS CoreBluetooth 教程
- Android中线程那些事
- android 在一个应用中启动另一个应用
- Android中线程那些事
- 关于Scrum团队的理解
- 中央情报局关键词提取——Unicode码
- QT学习之 布局管理
- JVM内存的设置(解决eclipse下out of memory问题)
- 重大决定!你绝对不想错过的内容
- CFileDialog