=和{}的不同
=是给整体赋值
如:int a=1;就是把a变成1
bool a[8]=true;就是把a里面的所以元素都变成true
{}是一个一个地分开复制
如int a[10]{1,2,3,4,5,6,7,8,9,10}
用={}赋值是不规范的
一个集合:{1,{1,2},4}
什么是子集合?
就是在里面找一部分出来
如{1}就是
注意:如{1,2}这种本身是一个集合的切勿直接写{1,2} ×!
要再加一对花括号因为它本身只是一个集合里面的元素 {{1,2}}这样因为那个子集合有一对花括号,这个元素自己也是一个集合也有一个花括号。
指针
指针减整数等于直接减(差几个类型)
int A[10];
A是一个数组,会自动转换成首元素的指针
&A是指向数组(整体)的指针
&A+1比&A大几个字节
指针+1比自己大几个字节,取决于这个指针所指的东西占多少字
&A这个指针所指的东西占40字节(占几个字节就大几个字节)
所以&A+1比&A大40字节(1个int4字节,10个40字节)
new 数组的返回值是首元素指针所以
这么写是不对的
要这么写(为你创建的new int建一个指针来存储它)
delete数组用的也是首元素的指针,同上
例如:
这段代码,运行它,控制台会输出:
思考题:为什么是1?
因为指针运算整数的整数是运算以一个类型(int/double)(4/8字节)为单位运算的
可以看到,下面的地址明明差了8(用十六进制输出地址)
因为指针减指针也是看差了几个类型(图中为double,每一个double占8字节)
new 变量好习惯
如果我这么new一个类型为Point 的new变量
这么做是不规范的,因为它没有标明它的类型
在圆括号里标明它是用Point这个结构体定义的才是正确做法
图论
图论:
基本概念
图是由点和边构成的图形
边有没有编号:有时候有,有时候没有
图只在乎结构不在乎画法
无向图的概念
无向图:就是边上面有箭头的
度:有几条边的一端是这个点。
子图(无向图):一个图里面的一部分就是子图(自己也算);
连通
连通(无向图):两点之间可以延线走到那么连通
连通图(无向图):任意两点之间可以延线走到
连通分量(无向图):两点之间可以延线走到且不是任何连通子图的子图
点双连通
点双连通(无向图):如果两个点在图中删除了除这两个点之外的任意一点,还能连通,那么它是点双连通
点双连通图(无向图):任意两点在图中删除了除这两个点之外的任意一点,还能连通
点双连通分量(无向图):两个点在图中删除了除这两个点之外的任意一点,还能连通且不是任何点双连通子图的子图
边双连通
边双连通(无向图):如果两个点在图中删除了任意一边,还能连通,那么它是边双连通
边双连通图(无向图):任意两点在图中删除了任意一边,还能连通
边双连通分量(无向图):两个点在图中删除了任意一边,还能连通且不是任何边双连通子图的子图
都有的概念
环:一条边它从一个点出发还是回到这个点
完全图:每个点都能沿线到另一个点的图
无向图的概念
有向图:就是边上面有箭头的
出度:指一个点从这里指出去的边有多少
入度:指一个点指向这里边的有多少 出度和入度都是有向图才有的
强连通
强连通(有向图):两个点能沿边互相走到,那么称这个点为强连通
强连通图(有向图):任意两点能沿边互相走到
强连通分量(有向图):是强连通还不是任何一个强连通子图的子图
弱连通
弱连通(有向图):两个点能沿边逆向走到,那么称这个点为弱连通
弱连通图:任意两点能沿边逆向走到
弱连通分量:是弱连通还不是任何一个弱连通子图的子图
美观
为了美观(图只在乎结构不在乎画法),可以让所有线都指向一个方向