homework-08

1. 理解C++变量的作用域和生命周期

a) 用少于10行代码演示你对局部变量的生命周期的理解

 1 #include <iostream>
 2 using namespace std;
 3 void p()
 4 {
 5     int a = 0;
 6     cout<<a<<endl;
 7     a = 1;
 8 }
 9 int main()
10 {
11     p();p();
12     return 0;
13 }
View Code

如程序所示,在函数p中声明了局部变量a,在主函数中调用2次函数p,其中局部变量a的值在两次调用中都是重新赋值的。

局部变量的生命周期就是函数段,作用域也就是函数段中。

 

2. 理解堆和栈,两种内存的申请和释放的方式

a) 用少于30行代码演示你对堆和栈两种内存申请方式的理解

 1 #include <iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     int *stack;
 6     int a = 10;
 7     stack = &a;
 8     cout<<stack<<endl;
 9     int *heap;
10     int *b = new int[10];
11     heap = b;
12     cout<<heap<<endl;
13     delete []b;
14     return 0;
15 }
View Code

如程序所示,栈,由编译器自动分配与释放;堆,需要手动申请与释放,若没有释放,则在程序结束时由操作系统回收。

在C++中,用new申请堆空间,用delete释放堆空间,若无delete,容易产生内存泄露现象。

 

3. 理解unique_ptr和shared_ptr

a) http://msdn.microsoft.com/en-us/library/vstudio/hh279676.aspx

b) http://msdn.microsoft.com/en-us/library/vstudio/hh279669.aspx

unique_ptr是一种智能指针,它的特点是两个unique_ptr指针不能指向同一个对象,不能进行复制操作,只能进行移位操作。

当超出使用域和寿命周期时,unique_ptr指针指向的对象将被删除。

与之相反,shared_ptr则可以多个指针指向相同元素,即可记录引用次数。

当引用次数为0时,这些指针指向的对象才会被删除。

其他内容请见homework-07。

 

4. 请尝试用“C++0x”,“C++11 & STL”两种不同的代码风格分割一个url,并上传代码到博客上。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 using namespace std;
 5 int main()
 6 {
 7     char str[1010];
 8     gets(str);
 9     for (int i = 0;i < strlen(str);i++)
10     {
11         if (str[i] == ':' && str[i + 1] == '/' && str[i + 2] == '/')
12         {
13             i = i + 2;
14             printf(", ");
15         }
16         else if (str[i] == '.' || str[i] == '/') printf(", ");
17         else printf("%c",str[i]);
18     }
19     printf("\n");
20     return 0;
21 }
View Code

上面代码为平时不用高端大气上档次的stl的方法所写,大概思路就是碰到://、:、/时候断开即可。

想尝试一下stl的方法,根据我的C#&Java编程经验,分割字符串用的函数是split函数,但是在C++里的split函数不太容易调用...

首先需要用到<vector>库,平时并没有怎么接触过,所以也不太敢写。

最后还是决定试着写了写,果断编译都过不了...

还是由于没找到神马好的例子吧...没法进行代码仿写...

中文问题:由于在字符数组中,中文存在两个字符中,所以上述方法应该可以实现。

posted @ 2013-11-18 00:27  yiming.zou  阅读(172)  评论(0编辑  收藏  举报