调试 & 常数优化:我有特别的 debug 技巧
rxz 的调试技巧(https://www.zhihu.com/question/60719584/answer/179363450):
#define DEBUG printf("Passing [%s] in LINE %d\n",__FUNCTION__,__LINE__)
C++ 的一个特性:
由于 C++ 中 a[b] = *(a+b) = *(b+a) = b[a],
因此你可以用 i[a] 代替 a[i],用 1[b] 代替 b[1],多维数组同样可以,你甚至可以用 5[4[3[2[1[a]]]]] 代替 a[1][2][3][4][5]。
用处,混乱代码 233。—— immortalCO(https://www.zhihu.com/question/49272859/answer/115277716)
Fast I/O:
inline int read() { // 快读
int X=,w=;
char ch=;
while(!isdigit(ch)) {
w|=ch=='-';
ch=getchar();
}
while(isdigit(ch)) X=(X<<)+(X<<)+(ch^),ch=getchar();
return w?-X:X;
}
inline double dbread() { // 小数快读
double X=,Y=1.0;
int w=;
char ch=;
while(!isdigit(ch)) {
w|=ch=='-';
ch=getchar();
}
while(isdigit(ch)) X=X*+(ch^),ch=getchar();
ch=getchar();
while(isdigit(ch)) X+=(Y/=)*(ch^),ch=getchar();
return w?-X:X;
}
inline void write(int x) { // 快些
if(x<) putchar('-'),x=-x;
if(x>) write(x/);
putchar(x%+'');
}
Fast Read 2
inline int read(){
RR int x;RR bool f;RR char c;
for (f=; (c=getchar())<''||c>''; f=c=='-');
for (x=c-''; (c=getchar())>=''&&c<=''; x=(x<<)+(x<<)+c-'');
return f?-x:x;
}
strtol,strtoll 的用法(http://www.cnblogs.com/the-tops/p/5799547.html):
名字: strtol, strtoll, strtoul, strtoull
convert a string to a (signed, unsigned ) long integer string
声明:
#include<stdlib.h> ( 这个是C标准库,与linux无关。这套函数是通用的。)
long int strtol(const char *nptr, char **endptr, int base);
long long int strtoll(const char *nptr, char **endptr, int base);
unsigned long int strtoul(const char *nptr, char **endptr, int base);
unsigned long long int strtoull(const char *nptr, char **endptr, int base);说明,第一个参数 nptr是要转化的字符串。第三个参数base说明nptr的进制。base 取值范围 0,2-36
这几个函数会忽略nptr前面的空格( ' ', '\t', '\n' '\f', '\v' '\r' ,由isspace判定为真的字符)
while (*nptr && isspace ( *nptr ) ) ++ nptr;然后 遇到非合法字符结束;
base = 2; 合法字符为0, 1
base = 3; 合法字符为0,1, 2
...
base = 11; 合法字符为0,1,...,9,a(A)
...
base = 36;合法字符为0, 1, ...,9,a(A),...,z(Z)。
字符 a-z,是忽略大小写的,混着来也行,例如 strtol("aA", NULL, ) 依然能得到正确的结果。
函数的第二个参数endptr可以为空,如果不为空,则 endptr 保存函数结束前的那个非合法字符的地址。
如果没有合法字符,则 *endptr = nptr ,函数返回0.
例如:
1.
char *endptr;
char nptr[]="123abc";
int ret = strtol(npstr, &endptr, );由于10进制里没有“数字”a,所以扫描到a,结束。
这样 ret = ;
endptr = &nptr[]; ( printf("%s", endptr); 将得到字符串 abc )
2.
char nptr[]=" \n\t abc";
int ret = strtol(nptr, &endptr, );由于函数会忽略nptr前面的空格(' ', '\n'...),所以,从字符a开始扫描,但是遇见的“第一个”即是不合法字符。
所以函数结束。 ret=; endptr = nptr;
以下的讨论,会认为 nptr 前面没有空格,
即执行过类似于 while (*nptr &&isspace ( *nptr ) ) ++ nptr;
如果base 为0.则分3种情况:
如果nptr 以0x(零x)开头,则把nptr当成16进制处理。
如果npstr以0(零)开头,则把nptr当成8进制处理。
否则,把nptr当成10进制。
对于函数执行错误,如传了一个非合法base,则errno会设置相关值
—— http://zengwu3915.blog.163.com/blog/static/27834897201262562912597/
奇♂技淫♂巧。。。
调试 & 常数优化:我有特别的 debug 技巧的更多相关文章
- gdb调试的艺术——Debug技巧
调试的艺术——Debug技巧总结 (本文从写好的wiki里粘出来的,格式稍乱不影响阅读) 用Q+编号代表问题,A+编号代表答案.用这种方式组织.如无特别说明,这些技巧都是针对Visual Studio ...
- Lua中如何实现类似gdb的断点调试--04优化钩子事件处理
在第一篇的01最小实现中,我们实现了一个断点调试的最小实现,在设置钩子函数时只加了line事件,显然这会对性能有很大的影响.而后来两篇02通用变量打印和03通用变量修改及调用栈回溯则是提供了一些辅助的 ...
- spoj 4487. Can you answer these queries VI (gss6) splay 常数优化
4487. Can you answer these queries VI Problem code: GSS6 Given a sequence A of N (N <= 100000) in ...
- 【DSA MOOC】起泡排序的原理及常数优化
根据学堂在线TsinghuaX: 30240184X 数据结构(2015秋)这门课的内容,对bubblesort做了一些总结. 1. bubblesort(起泡排序),原理来自这样一个观察规律:若序列 ...
- FFT常数优化(共轭优化)
最近闲着无聊研究了下\(FFT\)的常数优化,大概就是各种\(3\)次变\(2or1.5\)次之类的,不过没见过啥题卡这个的吧. 关于\(FFT\)可以看这里:浅谈FFT&NTT. 关于复数 ...
- 【分块】【常数优化】【Orz faebdc】洛谷 P1083 NOIP2012提高组 借教室
分块90分. By AutSky_JadeK [重点在下面] #include<cstdio> #include<cmath> using namespace std; #de ...
- OI常用的常数优化小技巧
注意:本文所介绍的优化并不是算法上的优化,那个就非常复杂了,不同题目有不同的优化.笔者要说的只是一些实用的常数优化小技巧,很简单,虽然效果可能不那么明显,但在对时间复杂度要求十分苛刻的时候,这些小的优 ...
- Linux高级调试与优化——gdb调试命令
番外 2019年7月26日至27日,公司邀请<软件调试>和<格蠹汇编——软件调试案例集锦>两本书的作者张银奎老师进行<Linux高级调试与优化>培训,有幸聆听张老师 ...
- 《软件调试的艺术》学习笔记——GDB使用技巧摘要
<软件调试的艺术>学习笔记——GDB使用技巧摘要 <软件调试的艺术>,因为名是The Art of Debugging with GDB, DDD, and Eclipse. ...
随机推荐
- 关于 阿里云 的linux 安装 jdk和tomcat 中的问题(解压版的jdk和tomcat)
一安装jdk 1:首先要申请一个服务器 2:其次官网下载jdk(按你的linux版本下载(我的目前是64)) 3:就是上传jdk 4:在 usr 文件夹下创建 java 文件夹 5:把jdk上传到ja ...
- Mac015--在Mac下安装使用Vagrant
网址:http://yansu.org/2014/04/10/install-vagrant-in-mac.html 一.安装Vagrant 下载地址在http://www.vagrantup.com ...
- 浅谈WebService开发(一)转
一.什么是WebService: 简单通俗来说,就是企业之间.网站之间通过Internet来访问并使用在线服务,一些数据,由于安全性问题,不能提供数据库给其他单位使用,这时候可以使 用WebSer ...
- Java多态性应用——多态数组、多态参数
多态数组: Person[] person = {new Person("张三", 32), new Student("李四", 21, 120, 90.0), ...
- CSU-1110 RMQ with Shifts (单点更新+区间最小值 zkw线段树)
In the traditional RMQ (Range Minimum Query) problem, we have a static array A. Then for each query ...
- R语言基础篇——数据读写
1.键盘输入数据(适合小数据集) #创建一个指定模式但不含数据的变量 mydata<-data.frame(age=numeric(0),gender=character(0),weight=n ...
- python学习笔记(11):文件的访问与函数式编程
一.文本文件读写的三种方法 1.直接读入 file1 = open('E:/hello/hello.txt') file2 = open('output.txt','w') #w是可写的文件 whil ...
- 奇葩问题:Invalid bound statement (not found): cn.zss.zsdemo.mapper.RoleMapper.selectByPrimaryKey
使用mybatis,遇到Invalid bound statement (not found): cn.zss.zsdemo.mapper.RoleMapper.selectByPrimaryKey ...
- Jquery WEUI 滚动加载(infinite)不触发
源代码:(1.0.1版本) Infinite.prototype.scroll = function() { var container = this.container; var offset = ...
- Git 安装使用及基础命令
Git终端软件安装 1.下载windows上git终端,类似shell工具,下载地址:http://msysgit.github.io/ 2. 安装方法,打开文件,一路点击Next即可 3.安装完成, ...