前言

我知道有学校是禁用STL的,

但STL是真的香,加个蛋,嗯,好吃

所以,本人希望有更多OIer能使用STL,减少工作量!


初见STL

首先,什么是STL?

STL,全称 Standard Template Library,也就是标准模板库

它是在惠普实验室开发出来的,它主要出现到C++中,

STL的代码从广义上讲分为三类:algorithm(算法)container(容器)iterator(迭代器),

然后,STL需要调用一个头文件

 1 #include<algorithm> 

没错,就是算法

当然,万能头是可以包含所有STL的头文件的

好的,回归正题


链表

什么是链表?

链表是一种上非连续、非顺序存储结构

链表可以在中间、前面、后面插入

特点是——

那为什么?

让我们解释下

假设数组里面有编号1、2、4、5、6

在数组是这样的

链表中,是这样标记的

看,记录了下一项

现在看看插入时

假设要在2~4间插入3

数组需要大量的交换

首先放进末尾

然后......

十分繁琐

链表却很简单

不懂了吧?

还记得吗,链表记录了下一项

所以,虽然链表数组是不符合我们期望的,

但通过记录下一项,我们可以实现方便快捷的插入


List

STL提供了好用的链表

定义List

需要头文件list

方法1:正规方式
list<类型> 链表名;

list<int> a;//定义一个整形链表,名为a

方法2:构造函数

这个方法我本来不知道的

list() //声明一个空列表;

list(n) //声明一个front()有n个元素的列表,每个元素都是由其默认构造函数T()构造出来的

list(n,val) //声明一个由n个元素的列表,每个元素都是由其复制构造函数T(val)得来的

list(n,val) //声明一个和上面一样的列表

list(first,last)//声明一个列表,其元素的初始值来源于由区间所指定的序列中的元素

来自Donny_you神犇的《C++中list用法详解》

访问List

假设有一个链表a;

front和back可以返回元素

a.front();//获得链表的头部元素
a.back();//获得链表的尾部元素

begin和end可以返回地址

a.begin();//获得链表的头部地址
a.end();//获得链表的尾部地址

注意!地址和元素是不同的

但*a.begin()可以等价于a.front();

*a.end()可以等价于a.back();

那怎么输出链表呢?

需要一个迭代iterator

还记得链表会记录下一项吗?

C++list里,下一项记录在地址中

比如有了第n项的地址*n,第n+1项的地址就为*n+1

这样,有了beginend,用i表示当前地址,不断i++,就可以输出了

注意!虽然在vector中,结束可以是i>=a.end()\

但在list中,它是乱的,必须是i!=a.end()

存储i时,我们需要用iterator来不断迭代

iterator很重要,在接下来的vector也会介绍

格式怎么打?教你一招

for(int i=a.begin();i!=a.end();i++)
{
printf("%d\n",*i);
}

然后就报错了

报错中寻找格式即可

for(list<int>::iterator i=a.begin();i!=a.end();i++)
{
printf("%d\n",*i);
}

放入元素

常用的两个函数

a.push_front(x)//将x加到最前面
a.push_back(x)//将x加到最后面

insert,功能强大

a.insert(i,x); //在i位置插入x
a.insert(i,y,x);//在i位置插入y个x
a.insert(i,b.begin(),b.end());//在i位置插入整个b链表

弹出元素

a.clear()//清空使用a的元素
a.resize(x)//将a改为只能容纳x个元素,其他弹出 a.pop_front()// 弹出第一个元素
a.pop_back() //弹出倒数第一个元素

其他函数

swap(a,b)//交换a和b链表
a.sort()//将a排序
a.unique()//将a去重
a.merge(b)//将ab合并,存在a里
a.empty()//判断是否为空

如果有遗漏,欢迎补充

例题

给出n个整数,每个数在long long范围内,把这些数升序排序后,去掉重复的,然后输出。

是不是很像明明的随机数?但数据在long long,桶排序不行了

list可以既简单又快速

因为有函数

#include<bits/stdc++.h>
using namespace std;
list<long long> a;
long long n,x;
int main()
{
scanf("%lld",&n);
for(int i=1;i<=n;i++)
{
scanf("%lld",&x);
a.push_front(x); }
a.sort();
a.unique();
for(list<long long>::iterator i=a.begin();i!=a.end();i++)
{
printf("%lld\n",*i);
}
}

那今天就到此为止了,喜欢就请关注我这个蒟蒻,谢谢!

如有错误,欢迎指出!

【远古黑历史】List链表及其功能的更多相关文章

  1. rlwrap: command not found和解决linux下sqlplus 提供浏览历史命令行的功能

    rlwrap工具可以解决linux下sqlplus 提供浏览历史命令行的功能,和删除先前输入错误的字母等问题 1.安装 需要readline包 这个安装光盘就有 [root@asm RedHat]# ...

  2. Java 实现简答的单链表的功能

    作者:林子木  博客网址:http://blog.csdn.net/wolinxuebin 參考网址:http://blog.csdn.net/sunsaigang/article/details/5 ...

  3. Windows Live Writer 历史Blog修改的功能

    其实 WLW 有历史Blog修改的功能,我只是一直没有找到,就在打开“最近发布的日志”里面, 位于屏幕的右侧“打开”列表下. 最近发现记忆力越来越差了,BLOG看来是必须的了.

  4. python实现单链表及链表常用功能

    单链表及增删实现 单链表高级功能实现:反序,找中间结点,检测环等 参考: https://github.com/wangzheng0822/algo

  5. c++单链表基本功能

    head_LinkNode.h /*单链表类的头文件*/#include<assert.h>#include"compare.h"typedef int status; ...

  6. Java实现单向链表基本功能

    一.前言 最近在回顾数据结构与算法,有部分的算法题用到了栈的思想,说起栈又不得不说链表了.数组和链表都是线性存储结构的基础,栈和队列都是线性存储结构的应用- 本文主要讲解单链表的基础知识点,做一个简单 ...

  7. terminal下历史命令自动完成功能history auto complete

    CentOS下,有一个很智能的功能,就是只输入一条历史命令的前几个字母,再按PageUp和PageDown键,就可以在以此字母为前缀的历史命令中上下切换.这个功能非常实用,而且比CTRL+R使用起来更 ...

  8. python--自己实现的单链表常用功能

    最近一个月,就耗在这上面吧. 很有收获的. # coding = utf-8 # 单向链表 class Node: def __init__(self, new_data): self.data = ...

  9. c++ 链表基础功能实现

    #include<stack> struct ListNode { int m_nValue; ListNode* m_pNext; }; ListNode* CreateListNode ...

随机推荐

  1. MySQL_fetch_array 和 MySQL_fetch_object 的区别是 什么?

    以下是 MySQL_fetch_array 和 MySQL_fetch_object 的区别: MySQL_fetch_array() – 将结果行作为关联数组或来自数据库的常规数组返回. MySQL ...

  2. Jpa 在CriteriaBuilder中添加where条件NotIn子查询

    final CriteriaBuilder cb = entityManager.getCriteriaBuilder(); final CriteriaQuery<Person> cq ...

  3. 数据分析之Numpy的基本操作

    Numpy NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库. 1 创建 ndarray 使 ...

  4. Content Security Policy减少劫持

    Content Security Policy减少劫持 什么是CSP? CSP是由单词 Content Security Policy 的首单词组成,是HTML5带给我们的一套全新主动防御的体系,旨在 ...

  5. 深入HTTP协议

    一.HTTP定义 超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器. HTTP是一个属于应用层的面向对象协议,由于其简捷.快速的方式, ...

  6. python输出二维数组中,每行N个最大值的索引

    `import heapq import numpy as np import random a = np.random.randint(50,size= (4,5)) a = np.array(a) ...

  7. LC-19

    19. 删除链表的倒数第 N 个结点 思路基本直接出来,双指针,IndexFast 和 IndexSlow 中间相隔 N - 1, 这样 IndexFast 到了最后,IndexSlow 自然就是倒数 ...

  8. 关闭Mac的Microsoft AutoUpdate

    最近使用Office 发现AutoUpdate一直会启动.我也不需要里面的更新.每次还要把它推出. 网上看到有两种方法,一种是暴力删除,另一种是通过权限限制. 暴力可不是我喜欢的方式,所以选择后者. ...

  9. Fabric2.2中的Raft共识模块源码分析

    引言 Hyperledger Fabric是当前比较流行的一种联盟链系统,它隶属于Linux基金会在2015年创建的超级账本项目且是这个项目最重要的一个子项目.目前,与Hyperledger的另外几个 ...

  10. 微信小程序一些标签

    wxml标签   一.视图容器(View Container): 二.基础内容(Basic Content) 标签名 说明 标签名 说明 view 视图容器 icon  图标 scroll-view ...