tricks - 实现
负下标
有的时候我们需要存一些负的东西,比如我就只要一个 \(-1\),或者说值域是 \([-10^6,10^6]\),而我懒得写平移
(写平移不仅麻烦,而且万一忘了就会RE,并且在本地不一定会被检测出来)
那咋整呢?
取下标:a[i],它的本质是 *(a+i)
开一个pool,然后开一个指针a指向pool+1,就可以访问 a[-1] 了
关于二维数组:
二维数组事实上是把每一行串起来变成一维数组存储的
所以说,比如你开了一个
int a[10][10],访问a[2][-1]等价于a[1][9]然后我们只需要开一个
p,指向二维数组的一行;然后就可以访问p[-1][-1]这样的下标了那么二维数组的“一行”,是什么类型呢?实际上,是
int (*p)[10]的类型。也许你在传函数参数的时候就注意到了,传数组的时候,第一维可以不限,但是后面必须要限制。这里也是一样的。
int (*p)[10]只是一个特例,你可以把10换成任意数,但是要保持和你开的第二维相同。另外,由于优先级问题,这里的括号不能省略。以下是一个例子,使得你可以访问
a[-100~100][-100~100]int pool[202][202];
int (*a)[200]=pool[101];
为什么要多开两个呢?注意到
a[100-100][-1]是不被允许的,所以a必须指向第101行,此处要躲开一个;后面要访问到a[101+100=201],而此时我们才开了201行,那肯定不行,所以要开到202在不造成太多浪费的情况下,多开一两个保安全还是不错的。
动态开点
固然可以写一个映射函数,如
#define id(x,y) (x-1)*m+y
事实上,为了好看,与节省空间,可以这样写
int id[N][N],tot=0;
for(int i=1;i<=n;++i) for(int j=1;j<=m;++j) id[i][j]=++tot;
也就是每次用 ++tot 来开点。这样更加的灵活,易懂(因为数组有名字)(当然函数也有名字,但是括号和中括号混合在一起闲的很乱,全都是中括号则很整齐)
节省空间是因为,有的时候你为了使映射函数好写,可能会浪费一些区间。
当然映射函数也有它的好处,比如数组开不下的时候映射函数就可以派上用场了。当然,为了可读性,也可以用map,如果必要。
花括号
不管是否换行与否,尽量不要省略花括号,如:
if (...) do_something
应该写作
if (...)
{
do_something;
}
尽管只是很简单的一句话。因为这样不费很多力气,而且方便后期加入功能,与调试。
而且看起来很整齐,强迫症狂喜
tricks - 实现的更多相关文章
- testng 教程之使用参数的一些tricks配合使用reportng
前两次的总结:testng annotation生命周期 http://www.cnblogs.com/tobecrazy/p/4579414.html testng.xml的使用和基本配置http: ...
- (转) How to Train a GAN? Tips and tricks to make GANs work
How to Train a GAN? Tips and tricks to make GANs work 转自:https://github.com/soumith/ganhacks While r ...
- Matlab tips and tricks
matlab tips and tricks and ... page overview: I created this page as a vectorization helper but it g ...
- LoadRunner AJAX TruClient协议Tips and Tricks
LoadRunner AJAX TruClient协议Tips and Trickshttp://automationqa.com/forum.php?mod=viewthread&tid=2 ...
- 【翻译】C# Tips & Tricks: Weak References - When and How to Use Them
原文:C# Tips & Tricks: Weak References - When and How to Use Them Sometimes you have an object whi ...
- 神经网络训练中的Tricks之高效BP(反向传播算法)
神经网络训练中的Tricks之高效BP(反向传播算法) 神经网络训练中的Tricks之高效BP(反向传播算法) zouxy09@qq.com http://blog.csdn.net/zouxy09 ...
- Hex-Rays Decompiler Tips and tricks Volatile memory
https://www.hex-rays.com/products/decompiler/manual/tricks.shtml First of all, read the troubleshoot ...
- hdu 5276 YJC tricks time 数学
YJC tricks time Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?p ...
- 10 Interesting Linux Command Line Tricks and Tips Worth Knowing
I passionately enjoy working with commands as they offer more control over a Linux system than GUIs( ...
- Git tricks: Unstaging files
NOTE: Following content is directly reprinted from http://andrewberls.com/blog/post/git-tricks-unsta ...
随机推荐
- 【探索之路】机器人篇(4)-根据3D文件来优化自己的机器人模型
此章节不是必须做的!!!! 因为我已经用solidworks画了机器人的3D模型,那我就直接导入已经画好的三维模型. 如果大家没有画也是可以直接使用上一章节我们已经构建的机器人模型.我这里只是一个对显 ...
- ArrayListHashmap嵌套
package arrayListHashMap; import java.util.ArrayList; import java.util.HashMap; import java.util.Map ...
- 学习DOS,个人笔记
在win中\表示根目录, 在linux中/表示根目录 注意: 有些家庭版的系统会选择性的调用命令的,有的命令虽然有那个文件,但是不能使用..... dir 命令 英语全称 ...
- 阿里技术专家详解 Dubbo 实践,演进及未来规划
Dubbo 整体介绍 Dubbo 是一款高性能,轻量级的 Java RPC 框架.虽然它是以 Java 语言来出名的,但是现在我们生态里面已经有 Go.Python.PHP.Node.JS 等等语言. ...
- lua脚本简介
Lua [1] 是一个小巧的脚本语言.它是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个由Roberto Ier ...
- JustAuth 1.15.9 版发布,支持飞书、喜马拉雅、企业微信网页登录
新增 修复并正式启用 飞书 平台的第三方登录 AuthToken 类中新增 refreshTokenExpireIn 记录 refresh token 的有效期 PR 合并 Github #101:支 ...
- 常用的Git命令清单
目录 名词解释 开卷必读 一. 新建代码库 二.配置 三. 忽略某个文件的改动 四. 增加/删除文件 五. 代码提交 六. 分支 七. 标签 八. 查看信息 九. 远程同步 十. 撤销 十一. Git ...
- Hive 中的四种排序详解,再也不会混淆用法了
Hive 中的四种排序 排序操作是一个比较常见的操作,尤其是在数据分析的时候,我们往往需要对数据进行排序,hive 中和排序相关的有四个关键字,今天我们就看一下,它们都是什么作用. 数据准备 下面我们 ...
- MySQL -- insert ignore语句
项目实战 用户登记激活码记录插入接口 数据库测试实例,其中手机号和父设备id为唯一索引 当我们使用普通的insert语句插入一条数据库中已存在的手机号和父设备id的数据时,会报重复的key的错 当我们 ...
- 从零开始的C程序设计大作业——学生成绩管理系统
前言 学生成绩管理系统可以说是C语言程序设计的结课的必备大作业了.花了些时间,费了些头发肝了下,完成了两个系统,一个是控制台版本的,另一个用easyx图形库进行了优化. 先放出完成后的演示图片占个坑. ...