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 }
如程序所示,在函数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 }
如程序所示,栈,由编译器自动分配与释放;堆,需要手动申请与释放,若没有释放,则在程序结束时由操作系统回收。
在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 }
上面代码为平时不用高端大气上档次的stl的方法所写,大概思路就是碰到://、:、/时候断开即可。
想尝试一下stl的方法,根据我的C#&Java编程经验,分割字符串用的函数是split函数,但是在C++里的split函数不太容易调用...
首先需要用到<vector>库,平时并没有怎么接触过,所以也不太敢写。
最后还是决定试着写了写,果断编译都过不了...
还是由于没找到神马好的例子吧...没法进行代码仿写...
中文问题:由于在字符数组中,中文存在两个字符中,所以上述方法应该可以实现。