Day 3 学习笔记 STL 模板库


一、结构体

结构体是把你所需要的一些自定义的类型(原类型、实例(:包括函数)的集合)都放到一个变量包里。

然后这个变量包与原先的类型差不多,可以开数组,是一种数据类型。

1.成员组成

1.成员实例,就是原先的类型。

2.成员函数,可以是比较函数,可以和结构体外的函数重名,定义域(放的地方)不同,值域(作用)可能相同。

2.函数的声明与定义

函数声明:声明有这样一个函数,

在下面定义这个函数,避免相互调用的时候发生没有编译的情况。

函数定义:让机器知道这个函数有什么作用。

举个栗子:

#include <bits/stdc++.h>
using namespace std;
struct gry{
int RP,EP;
int RP1();//声明
}gry1;
int gry::RP1()
{
return RP;
}

构造函数:

初始化结构体元素。

struct noip{
int rp,ep;
};
struct gry{
gry()//←就是构造函数,可以先声明,再调用
{
tql.RP=tql.EP=0;
}
noip tql;
}gry1();

gry1()的括号是调用的关键.

3.运算符重载

1.作用

定义加减乘除取模比较...

2.方式

1.友元函数
struct ???{
?? a,?? b;
friend bool/int/??? operator 运算符(??? x,??? y){
return ???.a运算符???.b;
}
2.正常模式(指针)
struct ???{
?? a,?? b;
bool/int/??? operator 运算符(??? y) const{
return this->a运算符???.b;
}
3.在外声明
bool/int/???& operator 运算符(??? y)
{
return ???.a运算符y.b;
}

差不多就这三种最常用。

这玩意用在哪里呢?还记得STL里面的sort和priority_queue吗?里面会用到大量的大于小于号之类的。如果不重载,编译就炸了。


终于铺垫完了。(累)

二、STL的食用

1.常用

1.pair

1.make_pair(typename first,typename second)

返回一个pair。

2.性质

先比较first,再比较second,已经重载比较运算符。

2.stack 栈

操作:

stackname.push(typename a)

把a压进栈

stackname.pop(typename a)

弹出栈顶

stackname.empty()

空就返回true。

stackname.top()

返回栈顶元素。

其实没什么价值,模拟起来也很简单。

struct stack{//手动模拟
stack(){a=vector<int>();n=0;}
vector<int>a;
int n;
void pop(){n--;a.pop_back();}
int top(){return a.at(n);}
bool empty(){return n>0;}
void push(int num){a.push_back(num);n++;}
};

3.vector 动态数组

就是长度是数组元素个数的数组。

操作:

push_back(tymename a)把a放进数组尾。

pop_back()弹出末尾元素。

......

模拟一下?先学指针!(dalao请跳过)

指针是什么?就是一个地址。

理解一下就是指向一个元素的地址叫指针...

说白了就是一个地址。

int *p=&a;//定义p存储a的地址。&a意思是变量a的地址。
//----------------------------------------------
int *p;p=&a;//与上面的等价
p++;//p挪到下一个int地方
(*p)++;//p所指的地方++

那么如果我们在结构体里面套用自己类型的变量,就会发生错误,但是如果套用自己类型变量的地址...就形成了一个动态的数据结构。

动态规划你的空间:new和delete。

举个例子(栈):

struct my_stack{
int num;
mystack *next;
mystack *dis;
};

五、bitset

意义就在于修改某位的二进制。

六、queue 队列

先进先出

.push(typrname a)一样的

.pop()弹出队头

.front()返回队头元素值

.size()返回队列长度

.empty()返回空?1:0

七、优先队列(二叉堆)

详见二叉堆

别忘了重载运算符!否则会死在这了...

八、set 集合

迭代器iterator,食用与指针类似。

.upper_bound(num)

返回一个比num小的前驱(迭代器)

.lowwer_bound(num)

返回一个比num大的后继(迭代器)

.erase(num)

删除元素

set类似数学上的集合,真·去重。(unique伪去重)

里面自建一颗红黑树,会进行排序和去重(平衡树性质),

multiset是多重集合,自建堆一个。

九、map 映射

(要求有小于号重载!)

map在python中被称之为dict(dictionary).

用法:

map<typename,typename>qwq;

指的是qwq内部有一个pair,第一个是key(关键字),第二个是value(值),数学函数类比一下。

qwq[a],指的就是map:qwq里a或者字典序第一个对应的value值。

调用迭代器时map的时候key食用字典序排列,

所以也可以食用迭代器找前驱、后继之类的东东。

(自建一颗平衡树)手写实在是再见了...

Day 3 学习笔记的更多相关文章

  1. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  2. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  3. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  4. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  5. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  6. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

  7. CSS学习笔记

    CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...

  8. HTML学习笔记

    HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...

  9. DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记

    今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...

  10. ucos实时操作系统学习笔记——任务间通信(消息)

    ucos另一种任务间通信的机制是消息(mbox),个人感觉是它是queue中只有一个信息的特殊情况,从代码中可以很清楚的看到,因为之前有关于queue的学习笔记,所以一并讲一下mbox.为什么有了qu ...

随机推荐

  1. JDK核心源码

    一.核心包有哪些? Jdk的包中,除开了lang包下面的类,用得最多的应该要属于util包下面的类了, 本篇文章主要针对Jdk的util包下面的类(util目录下面的类,暂时不包括util 包下面的子 ...

  2. 【MongoDB】如何注册windows服务

    一.为什么要注册windows服务 mongodb启动比较麻烦,每次都要cmd去开启.注册windows服务,可以设置开机启动,比较友好. 二.如何注册windows服务 1.安装mongodb 2. ...

  3. Struts 2(三):示例→基于Struts 2的用户注册模块

    示例→基于Struts2的用户注册模块 1.用户注册模块需求描述 在用户注册页面中填写用户信息,包括用户名.用户密码.确认密码.姓名等信息,填写完成后提交注册表单给Struts 2的业务控制器Acti ...

  4. Ubuntu系统python3版本设置问题

    参照:https://blog.csdn.net/wangguchao/article/details/82151372

  5. halcon中关于文本的创建以及写入

    原文链接:http://blog.sina.com.cn/s/blog_61cc743001017nxr.html#FileName 1.open_file( : : FileName, FileTy ...

  6. 简单主机批量管理工具(这里实现了paramiko 用su切换到root用户)

    项目名:简单主机批量管理工具 一.需求 1.主机分组 2.可批量执行命令.发送文件,结果实时返回,执行格式如下 batch_run  -h h1,h2,h3   -g web_clusters,db_ ...

  7. drupal CVE-2018-7600 复现

    1.系统环境 Drupal 8.5 linux 主机 ruby 代码 2.原理说明 影响版本 Drupal 6.x,7.x,8.x 参考:CVE-2018-7600漏洞分析 3.利用 在Python2 ...

  8. php 通过curl上传图片

    通过curl上传图片 PHP < 5.5: 使用 目前使用的php版本 7.1 测试无法使用 前面加@ 的方法上传文件 ,查找资料 使用 curl_setopt($ch,CURLOPT_SAFE ...

  9. ASP.NET MVC5 学习系列之模型绑定

    一.理解 Model Binding Model Binding(模型绑定) 是 HTTP 请求和 Action 方法之间的桥梁,它根据 Action 方法中的 Model 类型创建 .NET 对象, ...

  10. 2016-2017 ACM-ICPC Northeastern European Regional Contest Problem E. Expect to Wait

    题目来源:http://codeforces.com/group/aUVPeyEnI2/contest/229509 时间限制:2s 空间限制:512MB 题目大意: 在一个车站中有若干人在队列中等待 ...