【远古黑历史】List链表及其功能
前言
我知道有学校是禁用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
这样,有了begin和end,用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链表及其功能的更多相关文章
- rlwrap: command not found和解决linux下sqlplus 提供浏览历史命令行的功能
rlwrap工具可以解决linux下sqlplus 提供浏览历史命令行的功能,和删除先前输入错误的字母等问题 1.安装 需要readline包 这个安装光盘就有 [root@asm RedHat]# ...
- Java 实现简答的单链表的功能
作者:林子木 博客网址:http://blog.csdn.net/wolinxuebin 參考网址:http://blog.csdn.net/sunsaigang/article/details/5 ...
- Windows Live Writer 历史Blog修改的功能
其实 WLW 有历史Blog修改的功能,我只是一直没有找到,就在打开“最近发布的日志”里面, 位于屏幕的右侧“打开”列表下. 最近发现记忆力越来越差了,BLOG看来是必须的了.
- python实现单链表及链表常用功能
单链表及增删实现 单链表高级功能实现:反序,找中间结点,检测环等 参考: https://github.com/wangzheng0822/algo
- c++单链表基本功能
head_LinkNode.h /*单链表类的头文件*/#include<assert.h>#include"compare.h"typedef int status; ...
- Java实现单向链表基本功能
一.前言 最近在回顾数据结构与算法,有部分的算法题用到了栈的思想,说起栈又不得不说链表了.数组和链表都是线性存储结构的基础,栈和队列都是线性存储结构的应用- 本文主要讲解单链表的基础知识点,做一个简单 ...
- terminal下历史命令自动完成功能history auto complete
CentOS下,有一个很智能的功能,就是只输入一条历史命令的前几个字母,再按PageUp和PageDown键,就可以在以此字母为前缀的历史命令中上下切换.这个功能非常实用,而且比CTRL+R使用起来更 ...
- python--自己实现的单链表常用功能
最近一个月,就耗在这上面吧. 很有收获的. # coding = utf-8 # 单向链表 class Node: def __init__(self, new_data): self.data = ...
- c++ 链表基础功能实现
#include<stack> struct ListNode { int m_nValue; ListNode* m_pNext; }; ListNode* CreateListNode ...
随机推荐
- java-方法引用
/** * 方法引用格式: * 双冒号:: 引用运算符,它所在的表达式被称为方法引用.如果Lambda表达式 * 的函数方案已经存在于某个地方的实现中, * ===>那么可以通过双冒号来引用改方 ...
- docker打包镜像,测试部署
docker基本入门以后,(docker基本入门https://www.cnblogs.com/yangyangming/p/11470926.html)可以试试打包docker镜像与dockerfi ...
- Zookeeper 的典型应用场景?
Zookeeper 是一个典型的发布/订阅模式的分布式数据管理与协调框架,开发人员 可以使用它来进行分布式数据的发布和订阅. 通过对 Zookeeper 中丰富的数据节点进行交叉使用,配合 Watch ...
- Apollo模块文章
Apollo规划模块 自动驾驶公开课 | Apollo 2.5自动驾驶规划控制 : 这篇资料比较早,但是把EM Planner和Lattice Planner这两种在资料上经常看到的算法的来历和大概原 ...
- 算法 | 串匹配算法之KMP算法及其优化
主串 s:A B D A B C A B C 子串 t: A B C A B 问题:在主串 s 中是否存在一段 t 的子串呢? 形如上述问题,就是串匹配类问题.[串匹配--百度百科] 串匹配问题是一 ...
- Quartz高可用定时任务快速上手
定时任务使用指南 如果你想做定时任务,有高可用方面的需求,或者仅仅想入门快,上手简单,那么选用它准没错. 定时任务模块是对Quartz框架进一步封装,使用更加简洁. 1.引入依赖 <depend ...
- 创建axios拦截器
上一篇说axios并发的时候有提到 axios的请求统一管理是为了创建拦截器 具体说一下拦截器的创建 import Vue from 'vue'; import axios from 'axios'; ...
- Sentry前端部署拓展篇(sourcemap关联、issue关联、release控制)
原文首发于我的个人博客: https://lonhon.top/ 之前的<基础篇>主要介绍了Sentry和基本部署流程,在实际使用过程中你会发现Sentry受欢迎的原因:除了单纯的监控异常 ...
- c++实现职责链模式--财务审批
内容: 某物资管理系统中物资采购需要分级审批,主任可以审批1万元及以下的采购单,部门经理可以审批5万元及以下的采购单,副总经理可以审批10万元及以下的采购单,总经理可以审批20万元及以下的采购单,20 ...
- 【每日日报】第五十三天---安装My SQL
1 2今天安装了My SQL并学习了一些基础的命令 mysql下载及安装教程 2 没有成功安装SQL Server,误删了一些文件 3 明天继续看视频 ------------------------ ...