Day 3 学习笔记
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 学习笔记的更多相关文章
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
- CSS学习笔记
CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...
- HTML学习笔记
HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...
- DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记
今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...
- ucos实时操作系统学习笔记——任务间通信(消息)
ucos另一种任务间通信的机制是消息(mbox),个人感觉是它是queue中只有一个信息的特殊情况,从代码中可以很清楚的看到,因为之前有关于queue的学习笔记,所以一并讲一下mbox.为什么有了qu ...
随机推荐
- combotree -下拉框树异步加载
问题: 下拉树数据比较多时,全加载会产生页面延迟,需要实现异步加载 方案: 点击事件加载:先加载部分,点击节点时再展开并追加子节点 onBeforeExpand事件:在展开树前加载,感觉这种方式比较优 ...
- 有关Laravel 4 的 Homestead 安装部署的细节
对于Vagrant,我是相见恨晚的.有时候抽出几个小时的时间学会一种工具,对于将来可以节省几十甚至几百小时的时间. Vagant最大的好处就是节省了安装配置运行环境的时间,统一开发环境,同时可以最大限 ...
- angular之$watch() $watchGroup()和$watchCollection()
$watch $watch主要是用来监听一个对象,在对象发生变化时触发某个事件. 用法: $scope.$watch(watchFn,watchAction, deepWatch) 接下来讲一下这几个 ...
- windows下Mongodb图形化工具安装及配置
接上篇文章<Windows下Mongodb安装部署.docx> 一.RockMongo 1.RockMongo需要php环境,首先需要搭建php环境,选择采用 下载xampp,这里我用的是 ...
- GitHub 多人协作开发 三种方式:
GitHub 多人协作开发 三种方式: 一.Fork 方式 网上介绍比较多的方式(比较大型的开源项目,比如cocos2d-x) 开发者 fork 自己生成一个独立的分支,跟主分支完全独立,pull代码 ...
- Gradle初使用
我以前一直使用Maven来构建工程,这两天突然发现gradle也非常好用,记录一下自己使用gradle的过程. Gradle的下载与配置 本次选择下载的是gradle3.5版本,没选最新的gradle ...
- linux中使用wget设置参数防止中文乱码问题
在linux中一般会用到wget命令来请求远程的某个文件,此时,文件中会有一些中文字符或者中文汉字,要保持不出现"乱码"就需要在后面加上参数,如下图所示: 其中的 --restri ...
- 软件工程第八周PSP
1.本周PSP 2.本周进度条 代码行数 0 博文字数 356 知识点 无 3.时间分配饼状图 4.折线图
- Beta阶段第一次网络会议
Beta阶段第一次网络会议 游戏问题 游戏细节特征不够明显,大小虽然随着电脑分辨率的不同变化着,但是存在清楚的问题 游戏中的提示信息不够,玩家无法快速了解游戏 游戏中背景声音过于单一 游戏AI太简单 ...
- HDU 5179 beautiful number 数位dp
题目链接: hdu: http://acm.hdu.edu.cn/showproblem.php?pid=5179 bc(中文): http://bestcoder.hdu.edu.cn/contes ...