初步STL集装箱List
List
特点:
1.它实质上是一个双向链表
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ3hpYW9idXB0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center">
2.使用时包括<list>头文件 #include<list>
3.不支持随机訪问迭代器,仅仅能使用双向迭代器 //因此不能使用一些算法和运算符操作
4.在不论什么位置的插入、删除操作都是常数时间
成员函数
初始化
- list <int> intlist0; // 创建空的 intlist
- list <int> intlist1( 3 ); //包括3个元素
- list <int> intlist2( 5, 2 ); //包括5个元素,每一个都为2
訪问操作
front() |
返回第一个元素 (不检查容器是否为空) |
back() |
返回最后一个元素(不检查容器是否为空) |
pop_back() |
添加一元素到链表尾 |
pop_front() |
添加一元素到链表头 |
push_back() |
删除链表尾的一个元素 |
push_front() |
删除链表头的一元素 |
assign() |
擦除链表中的元素并把新的元素拷贝到目标链表中 |
empty() |
推断链表是否为空。假设是空,返回true。 |
举例:
- #include <iostream>
- #include <list>
- using namespace std;
- int main()
- {
- list<int> intlist;
- list<int>::iterator intiter;
- list<int>::reverse_iterator intriter;
- if(intlist.empty())
- cout<<"intlist为空"<<"\n"; //为空
- intlist.assign(4,1);
- cout<<"运行assign(4,1)后,intlist:";
- for(intiter=intlist.begin();intiter!=intlist.end();++intiter)
- cout<<*intiter;
- cout<<"\n"; //输出1111
- cout<<"intlist.front :";
- cout<<intlist.front();
- cout<<"\n"; //输出1
- cout<<"intlist.back :";
- cout<<intlist.back();
- cout<<"\n"; //输出1
- intlist.push_back(5);
- intlist.push_front(9);
- cout<<"运行push_back和push_front:";
- for(intiter=intlist.begin();intiter!=intlist.end();++intiter)
- cout<<*intiter;
- cout<<"\n"; //输出911115
- cout<<"反向输出 :";
- for(intriter=intlist.rbegin();intriter!=intlist.rend();++intriter)
- cout<<*intriter;
- cout<<"\n";
- // 输出511119
- intlist.pop_back();
- intlist.pop_back();
- intlist.pop_front();
- intlist.pop_front();
- cout<<"运行2次pop_back和2次pop_front : ";
- for(intiter=intlist.begin();intiter!=intlist.end();++intiter)
- cout<<*intiter<<" ";
- cout<<"\n";
- //输出11
- getchar();
- return 0;
- }
操作list里的元素
clear() |
从容器中删除全部元素 |
erase(position) |
删除由position指定的位置上的元素 |
erase(beg,end) |
删除从beg到end-1之间的全部元素 |
insert(position, elem) |
将elem的一个拷贝插入到由position指定的位置上,并返回新元素的位置 |
inser(position, n, elem) |
将elem的n个拷贝插入到由 position指定的位置上 |
insert(position, beg, end) |
将从beg到end-1之间的全部元素的拷贝插入到vecList中由position指定的位置上 |
resize(num) |
将元素个数改为num。 假设size()添加。默认的构造函数负责创建这些新元素 |
resize(num, elem) |
将元素个数改为num。 假设size()添加。默认的构造函数将这些新元素初始化为elem |
size() |
链表当前的元素个数 |
list的一些算法
merge() |
lst1.merge (lst2); //合并 lst2到lst1并清空lst2 |
sort() |
对链表排序,默认升序 |
reverse() |
反转链表 |
remove() |
删除链表中所有匹配值的元素 |
splice() |
对两个链表进行结合,结合后第二个链表清空 |
unique() |
删除相邻反复元素 |
- #include <iostream>
- #include <list>
- #include <algorithm>
- using namespace std;
- int main()
- {
- list<int> L(5,2);
- list<int> ::iterator pl;
- L.unique();
- for(auto i=L.begin();i!=L.end();i++)
- cout<<*i; //输出2
- cout<<endl;
- list<int> L1{1,3,2,5,4};
- for(auto i=L1.begin();i!=L1.end();i++)
- cout<<*i; //输出13254
- cout<<endl;
- L1.sort();
- for(auto i=L1.begin();i!=L1.end();i++)
- cout<<*i; //输出12345
- cout<<endl;
- L1.reverse();
- for(auto i=L1.begin();i!=L1.end();i++)
- cout<<*i; //输出54321
- cout<<endl;
- L1.push_back(3);
- for(auto i=L1.begin();i!=L1.end();i++)
- cout<<*i; //输出543213
- cout<<endl;
- L1.remove(3);
- for(auto i=L1.begin();i!=L1.end();i++)
- cout<<*i; //输出5421
- cout<<endl;
- list<int> L2(1);
- L2.merge(L1);
- for(pl=L2.begin();pl!=L2.end();pl++)
- cout<<*pl; //输出05421
- cout<<endl;
- list<int> L3{1,2,3,4,5,6,7,8}; //假设想把这里面的1234截到L2的05之间
- auto p1 = find(L3.begin(),L3.end(),1); //截取的过程中包含左不包含右
- auto p2 = find(L3.begin(),L3.end(),5);
- auto p3 = find(L2.begin(),L2.end(),5); //将该位置极其以后的元素皆后移一位
- L2.splice(p3,L3,p1,p2);
- for(pl=L2.begin();pl!=L2.end();pl++)
- cout<<*pl; //输出012345421
- cout<<endl;
- for(pl=L3.begin();pl!=L3.end();pl++)
- cout<<*pl; //输出5678
- cout<<endl;
- return 0;
- }
版权声明:本文博主原创文章,博客,未经同意不得转载。
初步STL集装箱List的更多相关文章
- 初步STL集装箱Vector
vector 特点: 1.可变长的动态数组 2.使用时包括头文件 #include <vector> 3.支持随机訪问迭代器 • 依据下标随机訪问某个元素时间为常数 • 在尾部加入速度非常 ...
- 初步STL该容器适配器
容器适配器 特点 容器一定的顺序来实现(让现有的以集装箱堆放/式工作) 分类 1) stack: 头文件 <stack> • 栈 -- 后进先出 2) queue: 头文件 <que ...
- hdu 4858 项目管理(STL集装箱)
项目管理 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- 知乎C++问题整理
如何平衡性能,合理选择C++STL集装箱? ANSER: 首先要搞清楚,假设STL问题,那么问题出在哪里? STL能够简单地觉得就是算法+数据结构,全部容器的算法选择和实现都是经过精心设计和严格測试的 ...
- C++ STL 的初步认知
学无止境!!! 尊重他人劳动,尊重出处:http://www.cnblogs.com/shiyangxt/archive/2008/09/11/1289493.html 我已经做了4年的MFC ...
- STL源代码分析 集装箱 stl_set.h
本文senlie原版的,转载请保留此地址:http://blog.csdn.net/zhengsenlie set ------------------------------------------ ...
- C++标准模板类库(STL)之queue初步
1,STL里有些什么? 包括三个内容:容器.迭代器.算法. 2,容器有哪些? 有stack, vector, queue, deque, list, set, multiset, map, multi ...
- STL 小白学习(1) 初步认识
#include <iostream> using namespace std; #include <vector> //动态数组 #include <algorithm ...
- 【STL初步】不定长数组:vector + 集合:set + 映射:map
一.vector 为了节省空间,有时我们会使用动态数组vector. 定义动态数组 vector<类型名>变量名 vector<int>que //定义que为一个int类型的 ...
随机推荐
- accel-pptp 部署
accel-pptp 是 pptp-client 和 pptpd 的改进版,使用内核 pptp 模块,相比 raw socket 实现方式能提供更好的性能. Ubuntu 12.04 上启用内核 ...
- Linux id 命令 - 显示用户id和组id信息
要登入一台计算机,我们需要一个用户名.用户名是一个可以被计算机识别的身份.基于此,计算机会对使用这个用户名的登陆的人应用一系列的规则.在Linux系统下,我们可以使用 id 命令. 什么是 id 命令 ...
- Hadoop 4、Hadoop MapReduce的工作原理
一.MapReduce的概念 MapReduce是hadoop的核心组件之一,hadoop要分布式包括两部分,一是分布式文件系统hdfs,一部是分布式计算框就是mapreduce,两者缺一不可,也就是 ...
- 微软已于10月底停止销售预装Windows 7/8.1的电脑
如果你想买新电脑,但是对Windows 10不感冒,你最好抓紧时间,因为这个月底是Windows7和Windows8.1的最后销售期限.10月31号是你能买到预装这两款操作系统的新电脑的最后一天,微软 ...
- 呵呵!手把手带你在 IIS 上执行 Python
公司的站点让我头痛死了.在众多前辈高手的带领下.一大堆的 CMD 在站点里执行得好好地,黑客攻击也好好地.仅仅有站点和我不好好地,我快累死了,站点快挂了.. . 为了解决问题.我想到了 Python ...
- 优先队列(priorityqueue)
队列是先进先出的线性表,顾名思义,优先队列则是元素有优先级的队列,出列的顺序由元素的优先级决定.从优先队列中删除元素是根据优先权的高低次序,而不是元素进入队列的次序.优先队列的典型应用是机器调度等. ...
- 【枚举+贪心】【ZOJ3715】【Kindergarten Electiond】
题目大意: n 个人 在选取班长 1号十分想当班长,他已经知道其他人选择了谁,但他可以贿赂其他人改选他,问贿赂的最小值 ps.他自己也要投一个人 要处理一个问题是,他自己投谁 其实这个问题在这种局面下 ...
- querySelectorAll
<!DOCTYPE html><html><body> <div id="query">第一个</div> <di ...
- 前端开发的常用js库
验证: jQuery formValidator,Validform; 提示框: artDialog, lhgDialog,jBox,jQuery textbox plugin 文件批量上传:uplo ...
- ASP.NET版本的Kindeditor插件的使用
1.先从官网中现在最新版本的Kindeditor,官网地址:http://www.kindsoft.net/ 下载之后的目录结构如下: