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. 100个linux站点

    (一) 文件下载 (二) 幽默娱乐 (三) 相关新闻 (四) 通用硬体 (五) 专用硬体 (六) 新手站点 (七) 图形/多媒体 (八) 游戏站点 (九) 网路杂志 (十) 入口(教育.链结) (十一 ...

  2. HDOJ-1007 Quoit Design(最近点对问题)

    http://acm.hdu.edu.cn/showproblem.php?pid=1007 给出n个玩具(抽象为点)的坐标 求套圈的半径 要求最多只能套到一个玩具 实际就是要求最近的两个坐标的距离 ...

  3. 杭电oj 3361

    Tips:字符在计算机中都是以ASCII码形式保存,直接以char形式输出ASCII码即可. #include<stdio.h> int main() { int T; scanf(&qu ...

  4. hdu 1754 I Hate It_线段树

    题意:略 思路:套hdu1166模版改改就行了,要注意的是,网上有的代码是错的,还贴出来... #include <iostream> #include<cstdio> #in ...

  5. OpenStack Block Storage安装配置use LVM

    1,storage systems use LVM Ins and configuration Block Storage; apt-get install lvm2; 创建Physical volu ...

  6. vsftpd配置---------------------之chroot_local_user和chroot_list_enable含义

    chroot_local_user和chroot_list_enable含义 很多情况下,我们希望限制ftp用户只能在其主目录下(root dir)下活动,不允许他们跳出主目录之外浏览服务器上 的其他 ...

  7. 一个月AS2.0总结。

    来这家公司一个月了,从最初学习它的木块,到流程,到组件,到改动,到自己做. 感觉好快. 1.AS2.0确实比較3.0差距太大.假设不是公司必须使用2.0,我是真不想使用. 2.代码重用性差.相同的代码 ...

  8. AS3: Socket 数据包 收 发

    AS3.0中使用Socket使用tcp服务器协议,它是一种流协议,不停的将分片传输给客户端,P作为流,发包是不会整包到达的,而是源源不断的. 它不同于UDP服务器协议,UDP作为数据包协议,整包到达. ...

  9. 加濾鏡效果GlowTween

    /** * * new GlowTween(xxxx, 0xFFFF00); * new GlowTween(xxxx, 0x00FFFF); * GlowTween */ package com.r ...

  10. 用Teleport Ultra下载网站全部页面 爬虫

    测试case,就是把Commons-FileUpload 的API下载来   上网查的时候我才发现这是一个由很多页面组成的网站,下载起来很麻烦.   怎么办呢?呵呵,一定是有办法的.Teleport ...