文档章节

STL学习记录(六):List

YourFirst
 YourFirst
发布于 2015/10/06 17:06
字数 1240
阅读 18
收藏 1

STL顺序容器List

List简介

List容器通过双向链表的形式来管理容器里的元素。这种方式表明他与Vector、Deque容器的不同。首先List不支持元素的随机访问,例如:你要访问第五个元素你必须先访问之前的四个。其次List的插入和移除操作更快。因为不需要移动元素它在任意位置的插入和移除操作的时间复杂度是常量。下面是List的常见操作:

迭代器

操作 说明
list.begin( ) 返回list的第一个元素的双向迭代器
list.end( ) 返回list的最后一个元素之后位置的双向迭代器
list.cbegin( ) 返回list的第一个元素的const型双向迭代器
list.cend( ) 返回list的最后一个元素之后位置的const型双向迭代器
list.rbegin( ) 返回list逆序的第的第一个元素的反向迭代器
list.rend( ) 返回list逆序的最后一个元素的反向迭代器
list.crbegin( ) 返回list逆序的第一个元素的const型反向迭代器
list.crend( ) 返回list逆序的最后一个元素的const型反向迭代器

容量

操作 说明
list.size( ) 返回list里面元素的个数
list.empty( ) 判断list是否为空
list.max_size( ) 返回list的最大的容量

直接访问

操作 说明
list.front( ) 返回第一个元素(不检查该元素是否存在)
list.back( ) 返回最后一个元素(不检查该元素是否存在)

赋值类

操作 说明
swap(list1,list2) 交换list1list2 数据
list1.swap(list2) 交换list1与list中的所有数据
list.assign(n,elem) n个元素elem的拷贝赋值给list
list.assign(beg,end) 将[beg,end)范围内的元素赋值给list
list.assign({*x1,x2,……}) 将初始化列表中的所有元素都赋值给list

修改类

操作 说明
list.clear( ) 删除list中的所有元素
list.erase(pos) 删除位于pos的元素
list.erase(beg,end) 删除位于[beg,end)之间的元素
list.resize(num) 重置list的大小,若list变大则新增元素使用该元素默认构造函数构造
list.resize(num,elem) 重置list的大小,若list变大则新增元素使用elem 的拷贝
list.remove(val) 移除所有值为val的元素
list.remove_if(op) 移除listh中元素经过op后为true的所有元素
list.push_back(elem) elem加到list的末尾
list.push_front(elem) elem加到list的前面
list.pop_back( ) 移除list中的最后一个元素(不是返回该值)
list.pop_front( ) 移除list中的第一个元素(不是返回该值)
list.insert(pos,elem) pos之前插入elem的拷贝并返回该元素的位置
list,insert(pos,n,elem) pos之前插入nelem的拷贝并返回第一个拷贝的位置(当n==0返回pos
list.insert(pos,beg,end) 将[beg,end)之间的元素插入到pos之前(当beg==end返回pos
list.emplace(pos,args… 将用参数args…初始化的元素插入到pos之前并返回该元素的位置c++11
list.emplace_back(args…) 将用参数args…初始化的元素添加到list的末尾(不返回任何值)c++11
list.insert(pos,{*x1,x2,}* 将列表{*x1,x2,}中所有元素的拷贝插入到*pos之前并返回第一个拷贝的位置(当为空时返回pos)c++11

特有的修改操作

操作 说明
list.unique( ) 移除所有连续的具有相同值的重复元素
list.unique(op 当元素的op操作为真时,移除所有连续的具有相同值的重复元素
list1.splice(pos,list2) list2中的所有元素移到list1的迭代器pos之前
list1.splice(pos,list2,pos2) list2迭代器Pos2所指元素移到list1迭代器pos之前
list1.splice(pos,list2,beg2,end2) list2中位与[beg2,end2)的所有元素移到list的pos之前
list.sort( ) 对所有元素进行排序采用符号 <
list.sort(op) 对所有元素进行排序采用符号 op
list1.merge(list2,op) 该操作必须保证list1与list2操作前有序,将list2中的所有元素移到list1中并保证依然有序
list1.merge(list2,op) 该操作必须保证list1与list2操作前有序,将list2中的所有元素移到list1中并保证依然有序,顺序由op操作符确定
list.reverse( ) 将list中的所有元素逆序

代码示例:

#include <iostream>
#include <list>
#include <algorithm>
#include <iterator>
using namespace std;

int main( )
{
    list<int> list_temp = {1, 2, 3, 3, 4, 6, 1, 1, 5};
    list<int> list_reverse = list_temp;
    list_reverse.reverse();
    cout<<"list_reverse: ";
    copy(list_reverse.cbegin( ),list_reverse.cend( ),ostream_iterator<int>(cout," "));
    cout<<endl;

    list_temp.sort();
    cout<<"list_sort: ";
    copy(list_temp.cbegin( ),list_temp.cend( ),ostream_iterator<int>(cout," "));
    cout<<endl;

    list<int> list_merge = list_temp; 
    list_temp.unique();
    cout<<"list_unique: ";
    copy(list_temp.cbegin( ),list_temp.cend( ),ostream_iterator<int>(cout," "));
    cout<<endl;

    list_merge.merge(list_temp);
    cout<<"list_merge: ";
    copy(list_merge.cbegin( ),list_merge.cend( ),ostream_iterator<int>(cout," "));
    cout<<endl;

    return 0;
}

运行结果:
list_reverse: 5 1 1 6 4 3 3 2 1
list_sort: 1 1 1 2 3 3 4 5 6
list_unique: 1 2 3 4 5 6
list_merge: 1 1 1 1 2 2 3 3 3 4 4 5 5 6 6

版权声明:本文为博主原创文章,未经博主允许不得转载。

© 著作权归作者所有

YourFirst
粉丝 1
博文 16
码字总数 17792
作品 0
合肥
程序员
私信 提问
STL list链表的用法详解

------------------------------------------------------------------------------- 原来... STL list链表的用法详解 本文以List容器为例子,介绍了STL的基本内容,从容器到迭代器,再到普通...

nao
2014/04/10
0
0
STL 简介,标准模板库

这篇文章是关于C++语言的一个新的扩展——标准模板库的(Standard Template Library),也叫STL。 当我第一次打算写一篇关于STL的文章的时候,我不得不承认我当时低估了这个话题的深度和广度...

AlphaJay
2010/04/20
352
0
如何学习一门新的语言二——方法与步骤

之前发表过一篇文章,也是谈如何学习一门新的语言《如何学习一门新的语言》,这篇文章主要的关注点是心态。 今天这篇文章主要的关注点是具体的方法和步骤,是我学习C++和python的一些经验,整...

晨曦之光
2012/06/06
121
0
学习C++的50条,谨以送给C++的粉丝们

1.把C++当成一门新的语言学习(和C没啥关系!真的);   2.看《Thinking In C++》,不要看《C++变成死相》(C++编程思想,翻译的非常差);   3.看《The C++ Programming Language》(这...

地瓜儿
2013/01/11
1K
7
【转载】数据结构利器之私房STL

数据结构利器之私房STL 此系列的文章适合初学有意剖析STL和欲复习STL的同学们。 学过c++的同学相信都有或多或少接触过STL。STL不仅仅是c++中很好的编程工具(这个词可能有点歧义,用类库更恰...

悠米海
2012/12/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JWT学习总结

官方 https://jwt.io 英文原版 https://www.ietf.org/rfc/rfc7519.txt 或 https://tools.ietf.org/html/rfc7519 中文翻译 https://www.jianshu.com/p/10f5161dd9df 1. 概述 JSON Web Token(......

冷基
今天
4
0
AOP的学习(1)

AOP 理解AOP编程思想(面向方法、面向切面) spring AOP的概念 方面 -- 功能 目标 -- 原有方法 通知 -- 对原有方法增强的方法 连接点 -- 可以用来连接通知的地方(方法) 切入点 -- 将用来插入...

太猪-YJ
今天
4
0
一张图看懂亮度、明度、光度、光亮度、明亮度

亮度、明度、光亮度,Luminance和Brightness、lightness其实都是一个意思,只是起名字太难了。 提出一个颜色模型后,由于明度的取值与别人的不同,为了表示区别所以就另想一个词而已。 因此在...

linsk1998
昨天
11
0
Python应用:python链表示例

前言 python链表应用源码示例,需要用到python os模块方法、函数和类的应用。 首先,先简单的来了解下什么是链表?链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是...

python小白1
昨天
5
0
Source Insight加载源码

Source Insight是一个图形化的源代码查看工具(当然也可以作为编译工具)。如果一个项目的源代码较多,此工具可以很方便地查找到源代码自建的依赖关系。 1.创建工程 下图为Snort源代码的文件...

天王盖地虎626
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部