刷题小tips

自从认真做题以后,结合自己的做题体验以及网上前人的总结经验贴,罗列下列的小建议:

1.为了避免每一次都要重复输入测试数据的麻烦,利用输入重定向文件

我是只把标准输入stdin重定位到in.txt,然后标准输出stdout依旧是输出到屏幕

所以就加了#include<stdio.h>           freopen("in.txt","r",stdin);         fclose(stdin);

当要提交的时候记得把首尾加的这两行代码注释掉或者删掉!!

这里顺便提一下我的傻吊经历,我一开始在路径下建了一个叫in.txt的文件,结果发现输入根本没有效果,最后发现是这一台电脑的文件名显示效果坑了我一把

这是一台电脑根本不显示后缀,就是我命名为in.txt的文件他的完全名是in.txt.txt,所以当我把名字改回in后就正常了

 

2.使用scanf,printf会快一点,数据量大时用cout,cin会慢一点点,虽然大多数时候都是没有什么讲究的,我本人一直以来也更喜欢简洁的cout、cin,但是多学一点也没有什么坏处

scanf的时候如果不是数组类型的话,变量名前不要忘记加&,不然有可能就是segment fault

 

3.如果申请的是数组的话,申请空间最好比要求的大一点,特别是如果是字符串类型的话char a[n],n一定要比读取的空间大1,要给末尾'/0'预留位置

4.!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!如果在代码里面把标准输出输入流重定向了,在最后一定一定要把那两行代码删掉,不要像我一样没删掉,然后出现段错误,还花了好长时间检查是不是数组越界,scanf是不是少写&,痛心疾首!!!!!!!!!!!!!!

5.还是在循环的时候,那些数量之间的关系要理清楚,特别是什么0开始还是1开始

6.结构体内部数据是没有初始化的,可能会出现一堆垃圾数据(像下图一样),所以尽量还是要自己初始化一下

 

 使用struct的构造函数来初始化,用memset(object,0,sizeof(object))

7.string末尾追加字符

str+='c';  str=str+'c';      str=""+'c';

8.0==false  非0(包含负数)==true

9.使用<algorithm>中的fill(a.begin(),a.end(),value)可以避开memset的按照字节初始化方式,直接进行对象级别(如容器)的初始化

10.如果使用visual_stdio,那么你在使用scanf,或是freopen这些函数的时候要在文件中加入"#define _CRT_SECURE_NO_DEPRECATE",那样就不会报错了

posted on 2019-08-29 16:51  川川——叮叮咚咚  阅读(123)  评论(0编辑  收藏  举报