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的更多相关文章

  1. 初步STL集装箱Vector

    vector 特点: 1.可变长的动态数组 2.使用时包括头文件 #include <vector> 3.支持随机訪问迭代器 • 依据下标随机訪问某个元素时间为常数 • 在尾部加入速度非常 ...

  2. 初步STL该容器适配器

    容器适配器 特点 容器一定的顺序来实现(让现有的以集装箱堆放/式工作) 分类 1) stack: 头文件 <stack> • 栈 -- 后进先出 2) queue: 头文件 <que ...

  3. hdu 4858 项目管理(STL集装箱)

    项目管理 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  4. 知乎C++问题整理

    如何平衡性能,合理选择C++STL集装箱? ANSER: 首先要搞清楚,假设STL问题,那么问题出在哪里? STL能够简单地觉得就是算法+数据结构,全部容器的算法选择和实现都是经过精心设计和严格測试的 ...

  5. C++ STL 的初步认知

    学无止境!!!    尊重他人劳动,尊重出处:http://www.cnblogs.com/shiyangxt/archive/2008/09/11/1289493.html 我已经做了4年的MFC ...

  6. STL源代码分析 集装箱 stl_set.h

    本文senlie原版的,转载请保留此地址:http://blog.csdn.net/zhengsenlie set ------------------------------------------ ...

  7. C++标准模板类库(STL)之queue初步

    1,STL里有些什么? 包括三个内容:容器.迭代器.算法. 2,容器有哪些? 有stack, vector, queue, deque, list, set, multiset, map, multi ...

  8. STL 小白学习(1) 初步认识

    #include <iostream> using namespace std; #include <vector> //动态数组 #include <algorithm ...

  9. 【STL初步】不定长数组:vector + 集合:set + 映射:map

    一.vector 为了节省空间,有时我们会使用动态数组vector. 定义动态数组 vector<类型名>变量名 vector<int>que //定义que为一个int类型的 ...

随机推荐

  1. lostash 正则

     (?:\s+?)  0个或者多个空格

  2. centos 6.5 安装docker

    Docker 安装: 1.centos 6 安装 yum update 升级到centos 6.7版本: yum install -y epel-release 安装 epel扩展源 yum inst ...

  3. LInux 下挂在Windows共享文件夹

    挂载WIndow共享文件夹  //192.168.0.103/software mount -t smbfs -o username=administrator,password=“de123”  / ...

  4. CSS美化页面滚动条

    文章来自:http://www.webhek.com/scrollbar 本文将会告诉你如何用CSS修改/美化浏览器页面上出现的滚动条.改变它们的颜色,调整它们的外形,适配你对页面UI设计.我们首先将 ...

  5. Eclipse setting Java code style and codetemplate

    1.open the eclipse tool window First click the Window menu,then check the children's menu which name ...

  6. lamp apache配置虚拟主机

    You don't have permission to access /index.php on this server

  7. hdu1588之经典矩阵乘法

    Gauss Fibonacci Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  8. 开发SCM系统笔记001

    使用EasyUI分页问题: 1.在分页界面没有显示声明分页属性名称,系统如何获取? EasyUI会向后台发送page\rows两个参数. 2.在配置sql参数时,parametertype与param ...

  9. TestWriter自动化测试介绍

    简介: TestWriter是上海博为峰结合多年为企业做测试服务的经验所研发的一款具有自主知识产权的自动化测试工具,为企业用户提供真正的低成本.高效率的自动化测试,引领软件测试自动化运用由技术层面向业 ...

  10. Javascript 中的false,零值,null,undefined和空字符串对象

    在Javascript中,我们经常会接触到题目中提到的这5个比较特别的对象--false.0.空字符串.null和undefined.这几个对象很容易用错,因此在使用时必须得小心. 类型检测 我们下来 ...