首先贴出智能指针的作业
1. 了解Lambda的用法
计算“Hello World!”中
a.字母‘e’的个数
b. 字母‘l’的个数
void main(){ char c[] = "Hello World"; int e = 0; [&]() { int i = 0; while (i < 11) { if (c[i++] == 'e') e++; } }(); printf("e:%d ", e); int l = 0; [&]() { int i = 0; while (i < 11) { if (c[i++] == 'l') l++; } return l; }(); printf("l:%d ", l); system("pause"); }
2. 练习使用智能指针
打印“Hello World!”循环右移n位的结果
Example:
n = 1, output = “!Hello World”
n = 3, output = “ld!Hello Wor”
void main(){ int n; cin >> n; auto sp1 = std::make_shared<string>("Hello World!"); auto sp2 = std::make_shared<string>("Hello World!"); int i = 0; int i2; while (i < 12) { i2=(i + n) % 12; (*sp2)[i2] = (*sp1)[i++]; } sp1.reset(); cout << *sp2; system("pause"); }
然后是作业06
1) 把程序编译通过, 跑起来。
读懂程序,在你觉得比较难懂的地方加上一些注释,这样大家就能比较容易地了解这些程序在干什么。
把正确的 playPrev(GoMove) 的方法给实现了。 如果大家不会下围棋,那就需要大家实地或者上网练习一下围棋的死活,提子是怎么回事。这个应该一个小时就能搞定。
注释放在github的代码中,请自行查看。主要的方法是要看研究明白原来是如何存储的,从doDeadGroup中我们能知道新的下棋操作会带来的新情况,当前的棋子颜色,次序等等都要改变。然后如果有吃子的现象就会生成一个数组来储存吃掉的子的信息,这样当我们写playPrev时只需要把这些信息搞懂,然后重新写入棋盘,并把当前的一些状态值设成上一步的即可。
2)根据你选择的教材 (三本之一或更多),点评一下这个程序设计方面的不足,例如:
编码风格,
程序架构,有哪些不符合良好的设计,这个程序的设计模式 (MVC等) 是高端大气国际化的么? 等等。
程序的错误处理,文件处理,UI 等等
我对这个程序的理解就是,有非常多的没用的参数和没用的代码没有注释掉只是在那里放着,这样会非常影响阅读,倒是很多东西摸不到头绪,浪费了很多时间。所有的处理都放到几个大类中,比如操作,棋子,棋谱等东西分开写会更有利与维护。在读取文件的时候也咩有考虑得很周全,try-catch的格式从来没使用或,程序的安全性很低。