第四章学习小结
一、本章内容的小结
二、心得体会
1.完成作业题模式匹配时,一开始用了BF算法(时间复杂度为O(n*m),然后最后一个测试点过不了的原因就是数据规模比较大了导致运行超时。然后改用了KPM算法(确实听起来容易打起来难,琢磨了很久才把next函数的实现搞明白,如果匹配的函数实现从下标为0开始的话,next函数要注意下标的问题)
2.实践1-还是求交集,我是利用读入的集合元素作为数组下标的方法,有一个问题就是该元素的值可以大于限制的数据个数(10^6),所以如果只是申请一个长度为10^6的数组的话,会出现段错误(越界访问)。所以我申请成10^7,虽然这样比较占用空间,但是想不到其他修改方案了。(也想过调用已有的排序函数,再按之前取非降序集合的交集的方法来做,不过没有尝试,不知道可不可行)
3.实践2-大炮打蚊子,这道题目自己开打前先是进行了用什么结构存放输入的蚊子分布位置以及存放的方式、以什么情况作为消灭的蚊子的标志、边界该怎么处理等的思考,我觉得自己的思路是可以的,结果在几个点出了错(没考虑一炮击中半死目标的情况)感谢cxn同学帮我找出错误(利用num计算每轮消灭蚊子个数后,num要重新置0,以及最大M、N为20时,对应是数组行下标列下标最大应该是19不是20)
4..讨论:这次讨论最大的问题就是对string、char和char*的理解与区分。本地运行后输不出结过,刚好小组同学也有这个疑问,我们进行了很久的讨论以及在网上查找资料,有一些小收获,但是还是不是很理解到底底层是怎么处理的,所以向老师请教,很感谢老师花了挺长时间找资料、做总结,为大家解答疑惑。(比心.jpg)
(1)若有:string s; //string 类的默认构造函数会生成一个空串,长度为 0 这种情况下对 s 的任何下标访问都是错误的,但是编译器没有进行检查。
(2)不能把‘\0'看作 string 对象的结尾符
(3)真正要对string类型的字符串进行操作的话,需要利用copy()方法,如:
char a[20] = {0}; //将 a 数组的全部元素初始化为‘\0' string s = "123456"; s.copy(a, 3, 1); //len=3, pos=1 cout << a << endl; // 输出:234
三、分享
1.建议阅读《C++Primer4th第四版中文版》的p115-124,会对string对象有更深的理解
2. 个人觉得以下两篇博文可以参考阅读【char *、char[]、const char*的转换和区别】
https://blog.csdn.net/u010275850/article/details/77512695
https://blog.csdn.net/wcc27857285/article/details/84852269
四、觉得这一章不足之处在于自己没有去用新定义的SString结构体类型来写代码,也没做到用STL来打代码,还有没有用到链表,也没有自己找别的题目打(惭愧脸.jpg) ,然后预习学习、完成任务的过程还是挺满意的;下一阶段还是希望能把学到的内容应用到代码上去,学着用STL来打。