【现代程序设计】homework-08
1. 理解C++变量的作用域和生命周期
a) 用少于10行代码演示你对局部变量的生命周期的理解
#include <iostream>
int main()
{
int i=;
for(int i=;i<;i++);
std::cout << i <<std::endl;
return 0:
}
解释:C++语言中,大多数作用域都是用花括号界定的。一般来说,名字从其声明点开始直到其声明所在的作用域结束处都是可见的。请看上面这个程序,在第4行声明了一个变量i(为方便叙述,记为i1),并初始化为0;在随后的for循环里又声明了一个变量i(为方便叙述,记为i2),并在该循环里增加值。直至i<4即i=3时退出。然后这个变量i(即i2)的作用域也随之结束了。最后输出的值为0,也就是第一个变量i(即i1)的值。因为该变量i(即i1)的作用域是从它上一行的花括号开始直到return 0;后面的花括号结束的。因此cout的i是第一个变量i(即i1)。
2. 理解堆和栈,两种内存的申请和释放的方式
a) 用少于30行代码演示你对堆和栈两种内存申请方式的理解
看到这个题目我只想到了数据结构中的栈,以及它“后进先出”这么一条原则,然后就不知道了。查了下网上的资料,恍然惊醒。原来这里说的是内存分配里的堆和栈。抓紧时间学了学,总结在下面:
内存中的栈区处于相对较高的地址,以地址的增长方向为上的话,栈地址是向下增长的。栈中分配局部变量空间,堆区则是向上增长的,用于分配程序员申请的内存空间。
int main()
{
int a;//栈
char *p1;//栈
p1 = (char *)malloc();//堆
}
两种内存申请方式在于:栈是系统自动分配空间,而堆则是程序员根据需要自己申请空间。
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”,可见一斑,它不能被复制,所以一切需要复制的操作,它都不能进行。 当这个unique_ptr的资源被传给另一个unique_ptr时,原来的unique_ptr将不再拥有。使用unique_ptr,使某个object任何时候都只有一个所有者,将使程序的逻辑得到简化。
那么与之相对的便是shared_ptr。当不止一个的所有者必须去管理内存中某个object的生命周期的时候,shared_ptr是一个很好的选择。share_ptr可以被复制,传值,赋值。所有这些指针可以指向同一个object,这些shared_ptr分享一个"control block",当有指向同一object的shared_ptr被增加、删除时,control block响应变化,指针数做相应更改。当指针数为0时,这个 “control block”将删除内存资源和自身。
4. 请尝试用“C++0x”,“C++11 & STL”两种不同的代码风格分割一个url,并上传代码到博客上。
For example:
Input: http://msdn.microsoft.com/en-us/library/vstudio/hh279674.aspx
Output: http, msdn, Microsoft, com, en-us, library, vstudio, hh279674, aspx
考察重点:
1. 类的定义和使用,基本成员是否完整
2. 输入参数的检查及其他鲁棒性的考虑
3. STL和C++11元素的使用
4. 除http://之外, 是否有考虑ftp:// site:// 等情况
5. 是否考虑url中的中文
6. 算法是否简洁高效
7. 代码风格
首先应该明确这两种代码风格究竟是怎么样的,有什么区别。百度百科上说“C++0x(也被称为C++11)”,那么C++0x”,“C++11 & STL”两种代码风格的不同点就是前者不适用STL而后者使用STL。
首先采用C++0x风格编写:
void UrlParse::parse(string u)
{
char url[]="\0";
strncpy(url,u.c_str(),u.length());
int i=;
while(url[i]==' '||url[i]=='\t'||url[i]=='\n')i++;//消除开头空白符
for(;url[i]!='\0';i++)
{
if(url[i]==':')
{
if(url[i+]!='\0'&&url[i+]=='/')
if(url[i+]!='\0'&&url[i+]=='/')//这三个字符连起来是 ://
if(i!=)//如果不是开头
{
cout<<", ";//输出逗号+空格,并将i增2.用于跳过后面的两个斜杠
i+=;
}
}// end if(url[i]==':')
else if(url[i]=='.'||url[i]=='/')
cout<<", ";//输出逗号+空格
else
cout<<url[i];
}
}
测试结果如图:
然后C++11 & STL风格。
void UrlParse::parseWithSTL(string u)
{
string url=u;
int tmp=; tmp=url.find("://");
while(tmp>=){
url.replace(tmp,,", ");
tmp=url.find("://");
} //将"://"替换为", " tmp=url.find("/");
while(tmp>=){
url.replace(tmp,,", ");
tmp=url.find("/");
}//将"/"替换为", " tmp=url.find(".");
while(tmp>=)
{
url.replace(url.find("."),,", ");
tmp=url.find(".");
}//将"."替换为", "
cout<<url<<endl;
}
测试结果:

代码已经上传至github:https://github.com/LmengHoo/homework-08/commit/c0966cd1c362201a3a3f4f33484bdc4790eee565
【现代程序设计】homework-08的更多相关文章
- 现代程序设计homework——04
题目: 详见:http://www.cnblogs.com/xinz/p/3341551.html 题目本身确实很难,“很难想到一个比较优雅的算法”,这是一个老师请来专门讲解这道题的大牛的原话.确实, ...
- 软工+C(9): 助教指南,持续更新...
上一篇:提问与回复 下一篇:从命令行开始逐步培养编程能力(Java) 目录: ** 0x00 Handshake ** 0x01 点评 ** 0x02 评分 ** 0x03 知识储备 ** 0x04 ...
- 20145219 《Java程序设计》第08周学习总结
20145219 <Java程序设计>第08周学习总结 教材学习内容总结 通用API 日志API 1.java.util.logging包提供了日志功能相关类与接口,使用日志的起点是log ...
- 2016CCPC东北地区大学生程序设计竞赛【01/03/05/06/08】
吧啦啦啦啦啦啦啦啦啦啦啦能量,ACM,跨!变身!变成一个智障! 04正在酝酿中!!!马上更新!!!!! 01题意:有一个n个点的图,对于任意两个不同的点,他的权值是两个点下标的最小公倍数,求最小生出 ...
- Python Revisited Day 08 (高级程序设计技术)
目录 8.1 过程型程序设计进阶 8.1.1 使用字典进行分支 8.1.2 生成器表达式与函数 8.1.3 动态代码执行与动态导入 动态程序设计与内省函数(表) 动态代码执行 eval(), exec ...
- 20145210 《Java程序设计》第08周学习总结
第十四章 NIO与NIO2 14.1 认识NIO •NIO概述 •NIO使用频道来衔接数据结点 •在处理数据时,NIO可以让你设定缓冲区容量 •Channel架构与操作 •isOpen():确认Cha ...
- 团体程序设计天梯赛L2-013 红色警报 2017-03-23 22:08 55人阅读 评论(0) 收藏
L2-013. 红色警报 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 战争中保持各个城市间的连通性非常重要.本题要求你编写一 ...
- 长春理工大学第十四届程序设计竞赛(重现赛)L.Homework Stream
链接:https://ac.nowcoder.com/acm/contest/912/L 题意: 作为大珩班尖子生,小r每天有很多作业要完成,例如工图.工图和工图. 很显然,做作业是要有顺序的.作业之 ...
- C语言作业|08
问题 答案 这个作业的属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-2/homework/9977 我 ...
- C语言I作业08
C语言I作业08 这个作业属于哪个课程 C语言程序设计ll 这个作业的要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2019-2/homework/9981 ...
随机推荐
- DedeCMS V5.7 Dialog目录下配置文件XSS漏洞
漏洞地址及证明:/include/dialog/config.php?adminDirHand="/></script><script>alert(1);< ...
- int(11)最大长度是多少,MySQL中varchar最大长度是多少(转)
int(11)最大长度是多少,MySQL中varchar最大长度是多少? int(11)最大长度是多少? 在SQL语句中int代表你要创建字段的类型,int代表整型,11代表字段的长度. 这个11代表 ...
- 10 steps to becoming the developer everyone wants
You thought it was all about programming skills. But you were wrong! Great code is fine, yet command ...
- 《PHP程序设计》读书笔记
好久没有更新过我的博客了,主要前一阵子去了实习,现在实习进入尾声,终于有机会看看书了. 在前一阵子的实习中,用到最多就是PHP的CI框架和Jquery,所以现在再看一本有关PHP的书籍来深刻认识一下P ...
- TCPIP,Http,Socket的区别
网络由下往上分为 物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 通过初步的了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层, 三者从本质上来说没有可 ...
- CSUST 1503 ZZ买衣服
解题报告:题目大意是输入两个数N和M,N表示一开始输入N个字符串,并且保存起来,然后再输入M个字符串,并且在输入M个字符串的同时要求判断每次输入的字符串是否已经存在,要注意的是后面输入的M个字符串每次 ...
- unity3d iPhone文件目录介绍
原地址:http://cl314413.blog.163.com/blog/static/190507976201210259126559/ 如何查看iPhone文件存放目录?首先需要越狱,越狱后打开 ...
- 速度之王 — LZ4压缩算法(三)
LZ4使用 make / make clean 得到可执行程序:lz4.lz4c Usage: ./lz4 [arg] [input] [output] input : a filename Argu ...
- datetime中strftime和strptime用法
from datetime import * format = "%Y-%m-%d %H:%M:%S" a=datetime.now() day=a.day b=a.replace ...
- jstack命令详解
jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack使 ...