本文第一部分是现代C++作业2,第二部分是对围棋程序的部分建议,还有一些修改和优化体现在Github里面的代码中。
首先是现代C++作业。
1. 了解Lambda的用法。计算“Hello World!”中,字母e和l的个数。
1 int count (char s [], char ch ) 2 { 3 int num = 0; 4 for_each( s, s + sizeof(s), [&](char c){ 5 num += (c == ch); 8 }); 9 return num; 10 } 11 // 统计字母e:count(s, 'e'); 12 // 统计字母l:count(s, 'l); 13 //Lambda表达式可以类比Java中的匿名函数,能使程序更干净
2. 练习使用智能指针。打印“Hello World”右移循环n位的结果。
代码的思路就是老师上课讲的,分两段打印。只不过这里通过unique_ptr保证函数结束后堆上的内容得到释放。
但是,我觉得自己写的不好,因为智能指针用的不够自然:为了将字符串分两段,不得不使用不安全的strncpy。没有老师一个' '的赋值简洁。
我主要受限制于智能指针的赋值上。
代码如下:
1 void ShiftPrint (char s [], int n ) 2 { 3 int len = strlen( s); 4 n %= len; 5 unique_ptr<char []> p (new char [len + 1]); 6 strncpy( p. get() + len - n, s, n); 7 8 p[ len] = '