memset

Avoiding memset for a multi-type structure

可紊 提交于 2020-01-17 16:25:23
问题 I would like to avoid using memset() on a structure like this: typedef struct { int size; float param1; } StructA; typedef struct { StructA a; unsigned int state; float param2; } Object; Can I do something like this (pseudo code, I can't check right now)? Object obj; int *adr = (int*)&obj; for (int i; i < sizeof(obj); i++) { *adr++ = 0; } Will it set every member of obj to zero? EDIT : to answer questions on comments. I have been working on some cases (with uni-type structures), where memset

trie树 & ac自动机

拟墨画扇 提交于 2020-01-17 01:37:09
trie树 trie树就是字典树,可以理解为单词树,树上每条边是字母,被标记的节点表示根到这个节字母组成了单词。 数据结构:用二维数组trie[maxn][N],tire[u][c]表示树上编号为u的父节点以边为c单词连接到的儿子的编号。 创建trie树:每次添加一个单词,若当前路径已建立此以连接此单词为边的儿子节点就沿着走,否则建立新的节点。 学习链接: 浅谈Trie树 Trie树模板 const int maxn = 5e5 + 7 ; const int N = 26 ; struct Tire { int trie [ maxn ] [ N ] , tot ; bool book [ maxn ] ; void Init ( ) { memset ( trie , 0 , sizeof trie ) ; memset ( book , 0 , sizeof book ) ; tot = 0 ; } void Insert ( string a ) { int u = 0 ; for ( int i = 0 ; i < a . size ( ) ; ++ i ) { int v = a [ i ] - 'a' ; if ( trie [ u ] [ v ] == 0 ) { trie [ u ] [ v ] = ++ tot ; } u = trie [ u ] [ v ]

Unhandled exception at XXXX (ntdll.dll) in XXXX.exe: XXXX: 堆已损坏。 (parameters:XXXX).

空扰寡人 提交于 2020-01-15 23:23:34
说一下今天编程时遇到的一个bug。 在编写 C语言:机器人的运动范围 这道题目时,一开始特别顺畅,后来在move_range函数中给visited数组赋初值时,我想使用另外一种方法去替换。 原先的赋值方法: memset ( visited , 0 , ( rows * cols ) * sizeof ( int ) ) ; 修改后的赋值方法: memset ( visited , 0 , strlen ( visited ) ) ; 改完之后重新运行(仅测试test1(),其余三个测试函数先注释掉),发现输出结果为空。 开始Debugging,弹出如下错误: 单击Continue: 继续单击Continue,错误在上述两个窗口之间来回反复。所以问题就出在memset函数上。 为了检验,我在初始化visited数组后设置了两个变量,来表示 strlen(visited) 和 (rows*cols)*sizeof(int) 的区别。 修改后的move_range函数: int move_range ( int k , int rows , int cols ) { if ( ( k < 0 ) || ( rows <= 0 ) || ( cols <= 0 ) ) return 0 ; int * visited = ( int * ) malloc ( ( rows * cols

【转】c++数组初始化

雨燕双飞 提交于 2020-01-15 08:57:58
 数组初始化列表中的元素个数小于指定的数组长度时,不足的元素补以默认值。 原文: C/C++数组初始化的一些误区 以前我这样初始化一个数组,并自我感觉良好: int a[5] = { 0 }; // 全部初始化为0 这种简单的写法让我非常爽,于是我又想把数组全部初始化为1: int a[5] = { 1 }; // 我想全部初始化为1 直到十分钟前,我都以为这句代码确实能够将5个元素全部初始化为1,但事实跟我想的完全不同!(基础的东西革命的本钱,疏漏不得啊) 全部初始化为0的那行代码确实是没问题的,可以正常工作。问题就出在想把数组全部初始化成一个非0的数,即非默认值,是行不通的(查看内存发现,只有数组的第一个元素被初始化为1,其他全为0)。这倒不是因为编译器对初始化为0给了个后门,而是因为一条基本语法规则: 数组初始化列表中的元素个数小于指定的数组长度时,不足的元素补以默认值。 对于基本类型int来说,当然就是补int()即0了。再看一下非基本类型的数组: string a[5] = { "foo" }; 有了上面的规则,就很容易知道其实相当于: string a[5] = { "foo", "", "", "", "" }; 即后面4个元素调用了string的默认构造函数进行的初始化,而第一个则调用的string::string(const char*)进行的初始化。

memset 和 fill 的区别

戏子无情 提交于 2020-01-11 14:31:35
memset:按照字节填充字符 ①头文件:#include <string.h> ②一般用于填充char数组 ③用memset填充int数组的话,只能赋值0,-1,INF(0x3f3f3f3f),否则会出错,直接赋值为-1 fill:为一个区间赋值 ①头文件:#include <algorithm> ②可以任意赋值 来源: https://www.cnblogs.com/shiliuxinya/p/12179635.html

最短路之spfa系列

给你一囗甜甜゛ 提交于 2020-01-11 13:15:16
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2544 Problem Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗? Input 输入包括多组数据。每组数据第一行是两个整数N、M(N<=100,M<=10000),N表示成都的大街上有几个路口,标号为1的路口是商店所在地,标号为N的路口是赛场所在地,M则表示在成都有几条路。N=M=0表示输入结束。接下来M行,每行包括3个整数A,B,C(1<=A,B<=N,1<=C<=1000),表示在路口A与路口B之间有一条路,我们的工作人员需要C分钟的时间走过这条路。 输入保证至少存在1条商店到赛场的路线。 Output 对于每组输入,输出一行,表示工作人员从商店走到赛场的最短时间 Sample Input 2 1 1 2 3 3 3 1 2 5 2 3 5 3 1 2 0 0 Sample Output 3 2 思路:套模板,记得是双向的 1 #include <cstdio> 2 #include <queue> 3 #include <vector> 4 #include <cstring> 5

hihoCoder 1387 A Research on \"The Hundred Family Surnames\"

旧街凉风 提交于 2020-01-07 00:59:11
搬家一个月,庆祝一下 啪啪啪啪啪啪啪啪啪啪❀❀❀❀ 题目 传送门 分析: 这什么奇奇怪怪的OJ,以前从来不知道的2333 以前只知道合并两个连通块时,其中一边直径端点为A,B,另一边为C,D D=max( dis(A,B) , dis(A,C) , dis(A,D) , dis(B,C) , dis(B,D) , dis(C,D) ) 原来合并两颗就在原树上可能交叉的虚树,竟然也可以用这个 而且多条直径也不会影响答案?? 细想一下貌似很有道理的亚子。。。 记录记录2333 调了半天 这个歪歪扣不仅丧病而且脑子不太好使,虚树上两点之间连边距离不是1 太菜了dbq #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<vector> #include<iostream> #include<map> #include<string> #define maxn 500005 #define INF 0x3f3f3f3f using namespace std; inline long long getint() { long long num=0,flag=1;char c; while((c=getchar())<'0'||c>'9')if(c=='-')flag=-1; while

一些常用函数:memset、memcpy、strlen、strcpy

风格不统一 提交于 2020-01-06 14:48:39
memset一般用作初始化函数。作用是将某一块内存中的内容全部设置为某一值。 格式:起始指针、设定的初始值、长度 memset ( buffer , 0 , sizeof ( int ) * 10 ) ; //在buffer处初始化10个0 memcpy用于从源内存地址的起始位置开始拷贝若干个字节到目标内存地址。 格式:返回指针,源指针、长度 memcpy ( dst , src , strlen ( src ) + 1 ) ; strlen是计算字符串长度的函数,从内存任意位置开始到’\0’为止的字符数量,一般比sizeof得到的少1。 格式:字符串指针 strlen ( str ) ; strcpy是字符串拷贝函数,把含有’\0’结束符的字符串复制到另一个地址空间。 格式:返回指针,源指针 strcpy ( dst , src ) ; 来源: CSDN 作者: 海洋之心。 链接: https://blog.csdn.net/weixin_42979679/article/details/103846996

Memset with stride

北城以北 提交于 2020-01-06 13:11:07
问题 With OpenGL, there's a lot of times where putting strides on the data is necessary for better efficiency. for example, the memory structure would be vertex-color-normal-vertex-color-normal.. etc. Is there any viable option for changing, say, only the color section of a memory with some kind of memset variant (that is, not using a loop). Also brings to question, is there such thing as a looping memset? For example, in an array of colors made of four floats each, set all of them to a particular

Error in memset() a 3D array

人走茶凉 提交于 2020-01-06 06:01:47
问题 I dynamically allocate a 3D array: int n1=2,n2=5,n3=3; int in1,in2,in3; float ***a; a = (float ***)malloc(n1*sizeof(float **)); for (in1=0;in1<n1;in1++) a[in1] = (float **)malloc(n2*sizeof(float *)); for (in1=0;in1<n1;in1++) for (in2=0;in2<n2;in2++) a[in1][in2] = (float *)malloc(n3*sizeof(float)); After that I want to initialize this 3D array. The conventional way is: for (in1=0; in1<n1; in1++) for (in2=0; in2<n2; in2++) for (in3=0; in3<n3; in3++) a[in1][in2][in3] = 1.0f; However, if I want