C++指针备忘

in 技术

摘录自 C++ Primer Plus

指针的危险

一定要在对指针应用解除引用操作符(*)之前,将指针初始化为一个确定的、适当的地址。这是关于是使用指针的金科玉律。

如下代码:

long * fellow; //create a pointer-to-long

*fellow = 223323; //place a value in never-never land

fellow确实是一个指针,但它指向哪里呢?上述代码没有将地址赋给fellow。那么223323将会被放在哪里呢?我们不知道。由于fellow 没有被初始化,它可能有任何值。不管是什么,程序都将把它解释为储存223323的地址。如果fellow的值碰巧为1200,计算机将把数据放在地址1200上,即使这恰巧是程序代码的地址。fellow指向的地方很可能并不是要存储223323的地方。这种错误可能会导致一些最隐匿、最难以跟踪的bug。

Comment and share

动态内存分配

in 技术

摘自Matrix67 C语言速成手册

四种动态内存分配函数,使用它们前需要在程序最前面包含头文件stdlib.h(C++应该是cstdlib)。四种函数的格式分别为:

void malloc ( size );
void
calloc ( n, size );
void free ( pointer );
void *realloc( pointer, size );
Continue reading

分块思想学习

in 技术

早上看了一下七中王迪大神写的一篇论文,学习了一下分块思想,只看了一点点,基本上是看着代码,再自己脑补的。

所谓分块就是把规模为n的问题分割成k块,每块规模为s,为了使对块内和整个范围的操作的复杂度平均些,令k = s = √n。利用这个思想就能把O(n)的复杂度降到O(√n),从而达到优化算法的目的。论文中如是说。

只看了一个简单的问题,如有一长度为n的正整数数列,完成m次操作(1≤n,m≤10 ˆ5),M x y:把第x个数字修改为y;Q x y:询问区间 [x,y] 中的最大值Max。

这个问题相当经典,有多种算法可解,因为在学分块,自然采用块状解决之。
Continue reading

这道题显然有,矩阵乘法可解(由数据范围可得)

显然有题目要求: f[n]=∑f[i] (n-k<i<n-1),矩阵乘法相关知识自行google,推荐阅读Matrix67写的一篇文章。

所以构造有数组A(k*k):

000…1

100…1

010…1

001…1

因为看k<10,我们可以先计算出f[1]~f[k],然后用矩阵乘法加速,计算出A^(n-k),最后再f*A^(n-k)乘一下就得出了。

我用的是递归式的矩阵二分取幂,后来才知道这样写会显得你很弱智……我也不知道为什么,然后就顺便再复习了一下,快速幂的非递归写法。
Continue reading

写在高考前

in 杂记

保送生的颓废生活……就快完结,可惜这并不是我想要的生活。
本来回家是为了学习,可如今C++还没学好,日子就快结束了。整天被传召回学校,一个早上就轻松地没了……
因为承诺过会去高考,所以剩下这两天是否要复习呢,本来决定要的,可又彷徨了
踏进六月,终于能上网了,可还是没能认真学习,感觉还是先过完高考这关再说吧,虽然现在对高考没什么感觉,我总是太在乎别人的感受了吗。
混乱的语言,也正表明我现在的心境。也许是最近没有好好感受算法的魅力了吧,在题库闲逛,想code时却才发现自己的语言还没学好……,pascal又在本能上抑制去使用它。
算了,明后两天复习下,再考两天试,就不用管了。
还有我的足球赛啊,好想参加啊……我应该去写份计划表吗,感觉自制力不行写了也没用对吧。

Comment and share

  • page 1 of 1

sillyplus

Write the code. Change the world


Student


China