memset

C++的auto声明、memset函数

笑着哭i 提交于 2020-02-07 04:48:54
文章目录 auto memset auto 为了让编译器能够根据初始值的类型推断变量的类型,C++重新定义了auto的含义。在初始化声明中,如果使用关键字auto,而不指定变量的类型,编译器将把变量的类型设置成与初始值相同; auto n = 100 ; //n is int auto x = 1.5 ; //x is double auto y = 1.3e12L ; //y is long double auto t = a [ 10 ] ; 但自动推断类型并不是为这种简单情况而设计的,如果永用于简单情形,会出错,假设要将x,y,z都指定为double auto x = 0.0 ; //0.0 is double double y = 0 //0.0 auto z = 0 ; // z is int 遍历数组内容: for(autox:a)中a为一个容器,作用是用x遍历并获得容器中的每一个值,只是遍历。 for(auto & x:a)使用了引用符号,可以对a中内容进行赋值,即可以通过对x赋值,来对a进行赋值。 auto还有很多用途,我只是想了解一下他是干啥的,其他的有关以后见到再学吧。 memset memset()是C的一个库函数,c++也可用,需声明头文件 < cstring > memset ( str , c , n ) 复制字符c到参数str所指向的字符串的前n个字符

二分图

戏子无情 提交于 2020-02-06 02:53:36
二分图,首先第一点什么是二分图: 把一个图的顶点划分为两个不相交集 U 和V ,使得每一条边都分别连接U、V中的顶点。如果存在这样的划分,则此图为一个二分图。比方说下图就是一个二分图。 ​ 那么首先第一点我们要判读一个图是否为二分图,可以采用染色的思想。对于相邻的节点然不同的颜色,然后递归在这棵树上找。我们可以申明一个color数组,int color[maxn],0代表白色,1代表黑色。对于相邻的染不同的颜色,也就是color[i]=(!color[from]);那么按照我们的定义二分图点集内不能有连线,那么如果出现起点和终点的颜色相同,那么就说明这个点集内有某条连线,也就是if(ma[from][i]&&color[from]==color[i]) return 0; int bfs() { queue<int>q; q.push(1); color[1]=1; while(!q.empty()) { int from=q.front(); q.pop(); for(int i=1;i<=n;i++) { if(color[i]==-1&&ma[from][i]) { q.push(i); color[i]=(!color[from]); } if(ma[from][i]&&color[from]==color[i]) return 0; } } return 1; }

网络流小结

╄→尐↘猪︶ㄣ 提交于 2020-02-05 06:53:10
网络流主要包括: 1、最大流 2、费用流 3、有上下界的网络流 网络流的基本技巧: 1、多个源点和汇点的情况。建立超级源点和超级汇点。 2、顶点有容量限制。拆成两个点,此两点连边,容量为原来的点被限制的容量。 3、最大费用转为最小费用。变负数,最后变回来。 一、最大流 最大流算法的思想是不断地找 S 到 T 的增广路。算法的效率是由找增广路的方法决定的。 Edmond - Karp 算法:用广搜找增广路,时间复杂度 O (n*m*m ) 。思路最简单。 1 const int N=110, INF=0x3f3f3f3f; 2 int Map[N][N],pre[N],n,ans; 3 bool vis[N]; 4 queue<int> que; 5 bool EK_bfs(int s,int e) 6 { 7 int i,k; 8 while(!que.empty()) que.pop(); 9 memset(vis,0,sizeof(vis)); 10 memset(pre,0,sizeof(pre)); 11 que.push(s); 12 vis[s]=1; 13 while(!que.empty()) 14 { 15 k=que.front(); 16 if(e==k) return 1; 17 que.pop(); 18 for(i=1;i<=n;i++) 19 { 20

C语言 结构体使用malloc动态申请内存时,关于如何初始化结构体的解决方法

风格不统一 提交于 2020-02-03 03:17:08
文章目录 1.使用bzero函数(Linux平台,Windows可用宏定义解决) -- 1.1 bzero函数详解 --1.2 实例 2. 使用memset函数(Windows) 2.1 memset函数详解 2.2实例 1.使用bzero函数(Linux平台,Windows可用宏定义解决) – 1.1 bzero函数详解 1.1.1 函数原型: void bzero(void *str, int n); 1.1.2 所在头文件:string.h 1.1.3 功能:将字符串str的前n个字节置为0,一般来说n通常取sizeof(str),方便将整块空间直接清零(即初始化)。 1.1.4 返回值:无返回值 –1.2 实例 1.2.1 将一个未初始化的数组清零(即初始化) char str [ 10 ] ; bzero ( str , sizeof ( str ) ) ; 运行结果 -1.2.2 将一个结构体清零(即初始化) # include <stdio.h> # include <stdlib.h> # include <string.h> # define bzero(a, b) memset(a, 0, b) //博主是在windows平台下运行的,所以自己定义一下 //新建一个结构体 struct student { char studentNumber [ 10 ] ;

memset 函数

半世苍凉 提交于 2020-02-02 20:39:00
memset() 函数可以说是初始化内存的“万能函数”,通常为新申请的内存进行初始化工作。它是直接操作内存空间,mem即“内存”(memory)的意思。该函数的原型为: # include <string.h> void *memset(void *s, int c, unsigned long n); 函数的功能是:将指针变量 s 所指向的前 n 字节的内存单元用一个“整数” c 替换,注意 c 是 int 型。s 是 void* 型的指针变量,所以它可以为任何类型的数据进行初始化。 数组也可以直接进行初始化,但 memset 是对较大的数组或结构体进行清零初始化的最快方法,因为它是直接对内存进行操作的。 有人会问:“字符串数组不是最好用'\0'进行初始化吗?那么可以用 memset 给字符串数组进行初始化吗?也就是说参数 c 可以赋值为'\0'吗?” 可以的。虽然参数 c 要求是一个整数,但是整型和字符型是互通的。但是赋值为 '\0' 和 0 是等价的,因为字符 '\0' 在内存中就是 0。所以在 memset 中初始化为 0 也具有结束标志符 '\0' 的作用,所以通常我们就写“0”。 memset 函数的第三个参数 n 的值一般用 sizeof() 获取,这样比较专业。注意,如果是对指针变量所指向的内存单元进行清零初始化,那么一定要先对这个指针变量进行初始化

leetcode405

孤街浪徒 提交于 2020-02-02 05:48:23
static的用处 1). 在函数体,一个被声明为静态的变量在这一 函数被调用过程中维持其值不变。 2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个 本地的全局变量 。 3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这 个函数被限制在声明它的模块的本地范围内使用 。 unsigned的用处 1、signed是默认的,表示这个变量是有符号的,可以 存储整数和负数 。 2、 unsigned则需要显示给出表示这个变量,没有符号值能存储数的大小,而且不能表示正负 。 3、signed存储符号是有代价的,代价就是存储空间中的一个比特位专门用来存储符号,这一位不能表示数值。一般来说,同类型的signed能够存储的数的绝对值大小要小于undigned。 4、unsigned的作用就是将数字类型无符号化, 例如 int 型的范围:-2^31 ~ 2^31 - 1,而unsigned int的范围:0 ~ 2^32。 5、signed在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果 需声明无符号类型的话就需要在类型前加上unsigned 。 memset的用处 void *memset(void *s, int ch, size_t n); 函数解释

c++数组初始化误区

拥有回忆 提交于 2020-02-02 03:05:20
看下面的一段代码: int statusArr[100] = {1} 能达到全都初始化为1的结果么? 结果是只有第一个元素初始化了为1,其他都是0. 之前经常写 int a[100]= {0} 这么写可以,为什么? 因为c++有个基本的语法规则,数组初始化列表中的元素个数小于指定的数组长度时,不足的元素补以默认值。当我们写0没有问题因为恰好0是int的默认值罢了。 string a[5] = { "foo", "", "", "", "" }; 即后面4个元素调用了string的默认构造函数进行的初始化,而第一个则调用的string::string(const char*)进行的初始化。 还有一个区别: int a[5]; string a[5]; 如果不明确指出初始化列表,那么基本类型是不会被初始化的(除全局变量和静态变量外),所有的内存都是“脏的”;而类类型则会为每个元素调用默认构造函数进行初始化。 注意,在C++11中中间的赋值号可以省略,即 int a[5]{1}; 并且,如果初始化列表为空,如 int a[5]{};,那将初始化所有元素为默认值,即与 int a[5]{0}; 等价 所以当你想在c++对数组赋初值时用正规方法memset.另外注意memset函数原型虽然是: void *memset(void *s, int ch, size_t n);

网络流学习笔记

随声附和 提交于 2020-02-02 00:37:36
最大流 ​ 我再次博客上暂不叙述预留推进(SAP), 事实是,我不会 ,暂且搁置,以后会补充 ​ 最大流在实际问题中的应用是,你要从一个源点s送水至汇点t,这些点中有水管链接,水管的最大能通过的水有不同,让你求单位时间内你最多能送多少水。 ​ 我们的流网络可以理解为一群有向边图 ​ 一些想法 ​ 我们定义 \(f(u,v)\) 为u节点到v节点的流量。, \(c(u,v)\) 为u节点到v节点的流量限制 ​ 首先我们由于不能爆水管,有这个显而易见的式子 \[ 0 \le f(u,v) \le c(u,v) \] ​ 其次我们来,思考一下对于每个节点的的流出和流入,显然的我们可以把KCL(即Kirchhoff's Current Law),推广到oi界上,我们有 \[ \sum _{v\in V} f(v,u)=\sum_{v \in V} f(u,v) \] ​ 想法结束进入正题 ​ 经过度娘的帮助,我们知道一种叫做增广路的东西,在一个残余网络(就是说某些管子已经有水了),就是说从源节点到汇节点的一条能走水的路径 ​ 这样我们知道,假如,我们一遍又一遍的操作之后,没有增广路可以找了,那么我们必定求出了最大流 ​ 然而怎么寻找增广路,这是一个问题。 ​ 经过思考之后我们可以用一个十分暴力的思想来解决,进行深搜,主要思想是 我们可以每一次从原点开始深搜 搜到汇节点

HIT1917Peaceful Commission(2-SAT)

雨燕双飞 提交于 2020-02-01 10:04:20
Peaceful Commission Source : POI 2001 Time limit : 10 sec Memory limit : 32 M Submitted : 2112, Accepted : 641 The Public Peace Commission should be legislated in Parliament of The Democratic Republic of Byteland according to The Very Important Law. Unfortunately one of the obstacles is the fact that some deputies do not get on with some others. The Commission has to fulfill the following conditions: Each party has exactly one representative in the Commission, If two deputies do not like each other, they cannot both belong to the Commission. Each party has exactly two deputies in the

memset初始化结构体之内存泄漏

心已入冬 提交于 2020-02-01 06:07:31
void *memset(void *str, int c, size_t n) 复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符。 str – 指向要填充的内存块。 c – 要被设置的值。该值以 int 形式传递,但是函数在填充内存块时是使用该值的无符号字符形式。 n – 要被设置为该值的字节数。 声明:在花括号中间,每个结构代表一个作用域,可以防止命名冲突, struct { int number; int *ptr; char name [NAME_LEN + 1]; }part1,part2; 如果常用到,可以使用类型定义这样声明, typedef struct { int number; int *ptr; char name [NAME_LEN + 1]; }part_t; part_t part1,part2; 还有一种是结构标记声明, struct part{ int number; int *ptr; char name [NAME_LEN + 1]; }; struct part part1, part2; 初始化:可以在声明的同时初始化,如 part_t part1 = {22, &item, “Good boy”}; // 这种初始化和数组很相似。 也可以指定初始化: part_t part2 = {.number=33,