自己曾经出错的地方!!全是精华!!!
1、加括号问题:不能写成这样if(6&8==0)... 应该注意加括号,把6&8看成整体结果if((6&8)==0)...
2、把变量 数组的声明放在while(T--){}里面!! 一定要注意! 如果放在外面执行下一个样例的时候数组里面的内容是不会变的!
3、检查是否多加了分号!!或者符号打错了!!一定要看好细节啊 有时候简单题可能不是思路错了 可能是细节没注意到
4、在cin>>后使用getline无法读取到数据,用到getline读入数据时一定要想着要再cin后面多写一个getline!!!
结果就是这样的。原因是因为 cin读入数据之后,遇到换行字符终止cin读入。但是换行字符还保存在输入流里面,getline读入的时候就会把换行字符读入进去 不会再读字符串。
读入数据一直是我的问题 还有就是像 scanf cin getline等等读入数据时,尤其是读入字符时要特别注意,出现问题一定要先检查是不是读入数据的问题。
5、函数名字一定不要写错了!! atoi 将字符串转换为int (不支持string) iota()三参数,将数字转换为字符串。 codeblocks不支持c++string的 to_string 等
itoa()原型: char *itoa( int value, char *string,int radix);
value:要转换的数据。
string:目标字符串的地址。
radix:转换后的进制数,可以是10进制、16进制等,范围必须在 2-36。
6、cin cout 在 ZOJ上交题也会TLE,用ios::sync_with_stdio(false);cin.tie(0);也没有用 改为scanf就过了。
7、lower_bound 的使用,一定要对准查找的类型。 如果要在结构体数组中查找,那么被查找的类型应该为结构体类型的 而不是int类型的!!
8、定义排序规则时一定不能出现变量重名的情况!
9、声明大数组一定要放在外面,否则程序运行时会卡住。放外面如果题目要求多组样例,还要记得每次加一个memset。
10、最好在定义变量的时候赋初值为0
当时就是因为maxlength没有赋初值导致一种特殊情况00的时候给漏掉WA了。。。服了。。。
11、今天用string 的substr()函数时报错,这是因为substr访问了非法地址!! 有时候真的太大意了 把代码放下面提醒自己以后别再犯错了。
12、注意数字和字母之间的转换!!! 今天在数字和字符之间的转化遇到了问题! 例如 cout<<char(10+'0')<<endl; 输出结果不是 10 实际结果是 “:” 符号!! 一定要特别注意这一点!当数字是个位数是 可以用数字+‘0’ 但是当数字的位数大于一位时,就要按位转化!!
当然也可以用itoa函数!
最后附上一张ASCII表!
13、输入以空行结束! The input is terminated by an empty line.
写法: while(getline(cin,s)&&s!="")
14、 注意sqrt的参数类型 容易出现编译错误
15、字符和数字之间转化!!!错了无数遍以后一定要记住!
(1)、数字转为字母 'A'/'a'+数字 (还要注意是否要+-1)
(2)、数字转为为数字字符 '0'+ 数字
下面是我没想出来办法的地方
16、好好理解递归函数中return 到底返回到哪里! 尤其是做深搜题目的时候
递归函数中return是返回到上一层调用该函数的地方 而不是直接返回到主函数!
17、慎用memset!! 不能用于赋值只能用于初始化内存。以后用memset只用于初始化0 其他千万不要用!
这是今天出错的地方!
下面是网上的解释:
其实说的就很明白了,只能对内存进行初始化,并不能赋特定的值。所以以后最大值可以用0x3f3f3f3f 或者1<<30
初始化最大值用 memset(int,0x3f,sizeof(int)); 如下,
18、关于bfs 和dfs中的标记数组 vis[ ][ ] 总是忘了写!!
以后一定要记得写啊!!!
还有在bfs中如果要输出中间过程点,用vector模拟队列时,在while循环中一定要写出这句退出条件 否则可能会 runtime error!!!
19、使用STL容器时,当容器中的元素类型为结构体类型时,必须写出排序规则!!! 不知道是不是这样 先这样记吧
今天出错的地方 加了一个排序规则就过了 没加之前无法编译一直报错。
20、以后一定要注意基础算法,今天做到用归并排序求逆序数时,才发现自己当初学的时候根本没好好听。学数据结构的时候没好好听,学算法的时候也没好好听。你之前没好好学的东西,早晚有一天都会返还给你。好好学吧。