首页 > 编程语言 >编程习惯

编程习惯

时间:2023-04-17 16:01:02浏览次数:38  
标签:typedef int 编程 习惯 long 网络 define 指针

先贴自己的缺省源

#include<bits/stdc++.h>
using namespace std;
#define rd(i,n) for(int i=0;i<n;i++)
#define rp(i,n) for(int i=1;i<=n;i++)
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define per(i,a,b) for(int i=b;i>=a;i--)
#define st string
#define vt vector
#define pb push_back
//#define int long long
typedef long long ll;
typedef long double ld;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	return 0;
}
//Crayan_r

万能头,一点 for 循环和长数据类型的 #definetypedef

关同步流习惯只关 cin

关于 #define int long long

个人很反感这个东西,但是也不否认它在调试时的一些用处。

首先的坏处就是空间,不太想争论 64 位机下时间 int32 是否和 int64 等同,只能说这个问题很复杂,不能直接说“相等”,涉及寻址、操作和总线传输若干操作之间的优劣不一,是计算机底层原理,追求这个不如去写“指针的指针的指针的指针”。

还有违背了 C++ 本身的约定有一种违背天条的感觉,并且 int 默认 \(32\) 位是为了兼容以前程序和方便程序员之间合并调试代码作出的规定,毕竟还是现在的主流。

最后就是真正的硬伤,在 \(\text{Topcoder}\) 和很多国际比赛中(包括曾经在 \(\text{CNOI}\) 中的交互题),都采用函数式交互的方式避免输入输出常数问题,但是有些(例如 \(\text{Topcoder}\))评测系统不会在答案文件中寻找强制类型转换后契合输入格式的函数,例如题目要求 void f(int a),写 void f(long long a) 就不会被评测系统检测到从而造成 CE,这在本地是测不出来的,因为本地自动调用会强转,没人会在赛时去写一个 xxx.h 的评测系统。

但是我的缺省源中依旧常年带着 //#define int long long,因为在调试不知道哪里 WA 的时候随手打开来跑一下确定是不是边角炸 int 真的很好用。不过我一般会在找到问题之后再关掉,思考 int 是否会炸是编程中重要思维的体现。

关于代码封装

classstructnamespace

别的不说,class 真香!尤其是在题目需要写好多棵(甚至 \(n\) 棵)主席树或者平衡树的时候,可以派上大用场。在写数据结构的时候,我的态度是能封则封,而且可以避免不同数据结构之间常用变量名重合的问题(例如 tree[])。

namespace 我主要用来写部分分包和封装网络流。网络流是我唯一习惯封装的非数据结构算法,因为其中有很多例如 visdep 还有图之类很常用的东西,有点难度的网络流题又基本都带点别的东西,所以网络流的封装才对我形成了习惯。

而且网络流封装还有一个好处就是契合网络流题目的模型化,把一种问题转化成标准的网络流问题,只用有限且单一的网络流工具接口就可以解决问题,保留了网络流建模这类题目本身的美感。

我比较习惯用 struct 的有矩阵和次大值。原因是 struct 相对 class 比较轻量级,而且写重载运算符比较方便。在矩阵中直接用 * 代替 multi(x,y),在次大值里直接维护 vsv,用 += 往里面添加新数,用 + 来合并。在维护这些东西的大数据结构上好处最为明显。

曾经还迷过指针实现的数据结构,用 -> 直接操作并且不用考虑大小真的很爽,而且指针在很多时候很快。一开始了解到这种写法就是 CF19D 树套树被卡常,换成指针写法就过了。

但是后来知道 new 虽然全局动态非连续空间,但是在没有内存池的情况下很慢,开内存池又没有了不用考虑大小的优势。直接操作的弊端在学到区间修改线段树的时候就显露了出来——因为默认在本对象修改,当前函数没有任何和当前对象是谁有关的信息,pushdown 我不会了。虽然后来又会了,但是也学到了新的东西——基于旋转的平衡树。旋转的代码在指针的情况下会变得非常长、不直观、难背且易错。所以也就渐渐抛弃了

标签:typedef,int,编程,习惯,long,网络,define,指针
From: https://www.cnblogs.com/jucason-xu/p/17326119.html

相关文章

  • 华为云智能编程助手赋能高校,揭示行业发展新动向​
    近日,哈尔滨工业大学(深圳)举办了一场名为“华为代码大模型的方案与应用”的主题活动。活动聚焦代码大模型的起源、发展及优势,以及其在软件研发领域的广泛应用,旨在为学界与产业界提供一个交流与探讨的平台,共同推动软件研发领域的技术创新。活动期间,华为云PaaS技术创新LabDevAILab......
  • 华为云智能编程助手助力哈尔滨工业大学(深圳)培养新时代软件研发人才​
    近日,哈尔滨工业大学(深圳)举行了一场主题为“华为代码大模型的方案与应用”的活动。本次活动旨在深入探讨代码大模型的起源、发展、优势以及应用,同时结合华为云CodeArtsSnap智能编程助手案例,分析其在赋能开发者高效、可信开发方面的作用,以满足日益增长的人才需求。代码大模型起源于......
  • 华为云智能编程助手助力哈尔滨工业大学(深圳)学子,引领软件研发新趋势​
    在哈尔滨工业大学(深圳)教学楼,3月31日下午华为代码大模型的方案与应用主题活动在这里精彩上演。华为云PaaS技术创新LabDevAILab负责人马宇驰,华为云PaaS服务产品部HR刘莉,PaaS技术创新Lab产品经理张芮恺为现场150多位参会者,讲解了代码大模型的历程和在实际应用中的突出表现,结合华为代......
  • c语言趣味编程(1)百钱百鸡
    一、问题描述百钱买百鸡问题:公鸡五文钱一只,母鸡三文钱一只,小鸡三只一文钱,用100文钱买100只鸡,公鸡、母鸡、小鸡各买多少只二、设计思路(1)定义三个变量下x,y,z代表公鸡,母鸡,小鸡的数量;(2)令公鸡的数量从0开始加,利用嵌套循环,内层母鸡数量从0开始增加,最内层小鸡数量从0开始增加;(3)令......
  • [技术讨论]国内学术界中的极限编程
    我的结对编程的论文最近终于可以开始寻找期刊发表了,因为合作的弟兄得到了第一笔基金支持,这样论文的发表就容易一些了。今天按照他的要求我检索了四种国内期刊,检索结果如下:软件学报中XP,极限,极限编程等关键字都没有检索到相关信息计算机学报中XP和极限编程都没有检索到任何论文。计算......
  • [技术讨论]关于交换编程实践的交换周期问题
    引子今天一个朋友问到了交换编程的周期问题,对话内容如下:对话王翀()说:请教个问题青润说:请讲。王翀()说:你认为交换编程,周期应该设置为多长为好?青润说:呵呵,交换编程的应用你看我那篇文章上写的,已经写的很清楚了,这个没有周期的问题。青润说:而是根据实际项目的过程来考虑的。王......
  • [技术讨论]交换编程实践与延续
    老兄弟老问题昨天在成都见到了以前一起工作的弟兄,他现在还在原来的单位工作,还在做原来的项目,我听说了原来那个公司的最新情况,感觉:他们终于熬出来了。期间,他就提到他们目前有一个问题,每个人负责一个大的模块从头到尾,结果每个人的模块自成体系,在检查错误与测试的时候遇到了很多问题,主......
  • [技术讨论]看了73篇极限编程论文后的感觉和一点总结
    最近两周的时间里,我看了73篇极限编程的论文,其中68篇是主要写结对编程的论文。在这些论文中,我看到了各个国家的文章,欧洲,北美,澳洲,少量亚洲的论文,其中看到了大概四五篇来自国内大学与国外大学或者研究机构合作的论文。国内这些大学的名字就不提了。我看到美国的一些结对编程的论文参与......
  • 编程中最难的就是命名?这几招教你快速上手
    前言本文转载于阿里开发者公众号,具体详见:编程中最难的就是命名?这几招教你快速上手正文 你可不能像给狗狗取名字那样给类、方法、变量命名。仅仅因为它很可爱或者听上去不错。在写代码的时候,你要经常想着,那个最终维护你代码的人可能将是一个有暴力倾向的疯子,并且他还知道你住......
  • 2023.4.16编程一小时打卡
    一、问题描述:线性代数里面我们学习过n维向量,请用类vector_N来封装n维整型向量,成员如下;私有数据成员: 向量维数n,int型指针p,int型公有函数成员:无参默认构造函数,在该函数中,将n置0,将p置null;重载输入输出运算符,输入运算符,先指定向量维数,若输入为非正整数,则提示错误信息,“Error......