【现代程序设计】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 ...
随机推荐
- php导出excel
感觉技术掌握的有些太杂了,一会儿鼓捣java,一会儿鼓捣php,一边还搞着.net, maybe this just is life. 此前同事给某县政法委做的一套维稳信息平台,数据库是封装了mysq ...
- mybatis 使用resultMap实现关联数据的查询(association 和collection )
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "- ...
- Xcode6中添加pch全局引用文件
前沿:xcode6中去掉了pch,为了一些琐碎的头文件引用,加快了 编译速度! xcode6添加pch文件方法 1. 右键Supporting File,选择“New File” 2. 选择Other ...
- 转:Java NIO系列教程(六) File Channel
Java NIO中的FileChannel是一个连接到文件的通道.可以通过文件通道读写文件. FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下. 打开FileChannel 在使用F ...
- 工作者对象HttpWorkerRequest
在ASP.NET中,用于处理的请求,需要封装为HttpWorkerRequest类型的对象.该类为抽象类,定义在命名空间System.Web下. #region Assembly System.Web ...
- [Angularjs]angular ng-repeat与js特效加载先后导致的问题
写在前面 最近在项目中遇到这样的一个前端的bug,在ng-repeat中绑定的图片,有一个晃动的特效,在手机端浏览的时候,图片有时候会正常展示,有时就展示不出来.当时猜测是因为angularjs与特效 ...
- [转]Linux进程间通信——使用信号
转载于:http://blog.csdn.net/ljianhui/article/details/10128731 经典!!! Linux进程间通信——使用信号 一.什么是信号 用过 ...
- JS判断一个数组中是否有重复值的三种方法
方法一: var s = ary.join(",")+","; for(var i=0;i<ary.length;i++) { if(s.replace( ...
- 修改织梦默认提示"dedecms提示信息!"
在使用dedecms搜索的时候如果搜索频率过快,经常会跳出一个提示窗口提示"管理员设定搜索时间间隔为*秒,请稍后再试!".怎么自定义Dedecms提示信息呢?让心存不轨的家伙少一个 ...
- cocos基础教程(11)事件分发机制
cocos3.0的事件分发机制: 创建一个事件监听器-用来实现各种触发后的逻辑. 事件监听器添加到事件分发器_eventDispatcher,所有事件监听器有这个分发器统一管理. 事件监听器有以下几种 ...