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 ...
随机推荐
- PostgreSQL的hstore初步学习
安装hstore: 进入源代码的 /contrib/hstore 目录,然后执行gmake 和 gmake install: [root@pg200 hstore]# gmake gcc -O2 -W ...
- Discover Feature Engineering, How to Engineer Features and How to Get Good at It
Feature engineering is an informal topic, but one that is absolutely known and agreed to be key to s ...
- windows下sublime text的node.js开发环境搭建
首先安装sublime text3,百度一堆,自己找吧.理论上sublime text2应该也可以.我只能说一句:这个软件实在是太强悍了. 跨平台,丰富的插件体系,加上插件基本上就是一个强悍的ide了 ...
- v-for 指令
JS部分: var app = new Vue({ el: "#app", data() { return { list: [1, 2, 3, 4], objList: [ { i ...
- rz和sz上传下载文件
安装软件包 yum install lrzsz 上传文件,输入rz选择文件上传(可以按住shift键多选) # rz sz 下载文件到本地,选择保存文件夹 # sz dd xshell设 ...
- JAVA学习笔记--正则表达式
正则表达式是一种强大而灵活的文本处理工具.使用正则表达式,可以让我们以编程的方式构造复杂的文本,并对输入的字符串进行搜索. 一.基础正则表达式语法(表格来自J2SE6_API) 字符 x 字符 x \ ...
- 华为笔试——C++转换字符串问题
题目:转换字符串 题目介绍: 将输入字符串中下标为偶数的字符连成一个新的字符串输出,需要注意两点: 1. 如果输入字符串的长度超过20,则转换失败,返回“ERROR!”字符串: 2. 输入字符串只能由 ...
- [T-ARA][Falling U]
歌词来源:http://music.163.com/#/song?id=27506041 作词:韩尚元 [作词:韩尚元] 作曲:韩尚元 [作曲:韩尚元] Love is pain Love is pa ...
- hbase实战——(1.1 nosql介绍)
什么是nosql NoSQL(NoSQL = Not Only SQL),意思是不仅仅是SQL的扩展,一般指的是非关系型的数据库. 随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0 ...
- Python3 函数式编程自带函数
一 map函数 引子 需求1:num1=[1,2,3,4],我的需求是把num1中的每个元素平方后组成新列表. ret = [] num1 = [1,2,3,4] for i in num1: ret ...