作业要求:
1. 了解Lambda的用法
计算“Hello World!”中
a.字母‘e’的个数
b. 字母‘l’的个数
2. 练习使用智能指针
打印“Hello World!”循环右移n位的结果
Example:
n = 1, output = “!Hello World”
n = 3, output = “ld!Hello Wor”
Lambda表达式部分:
对于这种新东西,我向来是理解起来比较费劲的。于是结合老师的讲义,上网看了很多其他人的介绍。
http://www.cnblogs.com/zhuyp1015/archive/2012/04/08/2438176.html
发现所谓lambda表达式 不过是一种没有函数名的函数,或者说函数的另一种表达方法,掌握了相关语法知识,代码实现起来也不算困难。
智能指针部分:
同样是学习了网上的资源之后,我得到了启示:智能指针(smart pointer)是存储指向动态分配(堆)对象指针的类,用于生存期控制,能够确保自动正确的销毁动态分配的对象,防止内存泄露。
具体的使用方法这里也介绍的很详细:
http://blog.youkuaiyun.com/xt_xiaotian/article/details/5714477
。。。于是,看了不知道多久之后。。。编了不知道多久之后。。。
上代码:
两个写到了一起
1 // ConsoleApplication1.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 #include "iostream" 6 #include "string.h" 7 #include "memory" 8 9 using namespace std; 10 11 void UseSmartPointer(int x); 12 char a[]="Hello World!"; 13 int _tmain(int argc, _TCHAR* argv[]) 14 { 15 printf("Part 1\n"); 16 int i,e=0,l=0,n=0; 17 for (i=0;i<strlen(a);i++) 18 { 19 l = l + [=]()mutable throw() -> int {return (a[i]=='l');}(); 20 e = e + [=]()mutable throw() -> int {return (a[i]=='e');}(); 21 22 } 23 printf("Number of L is %d\n",l); 24 printf("Number of E is %d\n\n",e); 25 26 27 printf("Part 2\n"); 28 scanf_s("%d",&n); 29 UseSmartPointer(n); 30 return 0; 31 } 32 33 void UseSmartPointer(int x) 34 { 35 std::unique_ptr<char> abc_uniquePtr(new char[20]); 36 strcpy_s(abc_uniquePtr.get(),20,"Hello World!"); 37 string s = abc_uniquePtr.get() + strlen("Hello World!") - x; 38 printf("%s\n",s); 39 *(abc_uniquePtr.get() + strlen("Hello World!") - x) = '\0'; 40 s = abc_uniquePtr.get(); 41 printf("%s\n",s); 42 43 }
运行结果: