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的更多相关文章

  1. 现代程序设计homework——04

    题目: 详见:http://www.cnblogs.com/xinz/p/3341551.html 题目本身确实很难,“很难想到一个比较优雅的算法”,这是一个老师请来专门讲解这道题的大牛的原话.确实, ...

  2. 软工+C(9): 助教指南,持续更新...

    上一篇:提问与回复 下一篇:从命令行开始逐步培养编程能力(Java) 目录: ** 0x00 Handshake ** 0x01 点评 ** 0x02 评分 ** 0x03 知识储备 ** 0x04 ...

  3. 20145219 《Java程序设计》第08周学习总结

    20145219 <Java程序设计>第08周学习总结 教材学习内容总结 通用API 日志API 1.java.util.logging包提供了日志功能相关类与接口,使用日志的起点是log ...

  4. 2016CCPC东北地区大学生程序设计竞赛【01/03/05/06/08】

    吧啦啦啦啦啦啦啦啦啦啦啦能量,ACM,跨!变身!变成一个智障! 04正在酝酿中!!!马上更新!!!!!  01题意:有一个n个点的图,对于任意两个不同的点,他的权值是两个点下标的最小公倍数,求最小生出 ...

  5. Python Revisited Day 08 (高级程序设计技术)

    目录 8.1 过程型程序设计进阶 8.1.1 使用字典进行分支 8.1.2 生成器表达式与函数 8.1.3 动态代码执行与动态导入 动态程序设计与内省函数(表) 动态代码执行 eval(), exec ...

  6. 20145210 《Java程序设计》第08周学习总结

    第十四章 NIO与NIO2 14.1 认识NIO •NIO概述 •NIO使用频道来衔接数据结点 •在处理数据时,NIO可以让你设定缓冲区容量 •Channel架构与操作 •isOpen():确认Cha ...

  7. 团体程序设计天梯赛L2-013 红色警报 2017-03-23 22:08 55人阅读 评论(0) 收藏

    L2-013. 红色警报 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 战争中保持各个城市间的连通性非常重要.本题要求你编写一 ...

  8. 长春理工大学第十四届程序设计竞赛(重现赛)L.Homework Stream

    链接:https://ac.nowcoder.com/acm/contest/912/L 题意: 作为大珩班尖子生,小r每天有很多作业要完成,例如工图.工图和工图. 很显然,做作业是要有顺序的.作业之 ...

  9. C语言作业|08

    问题 答案 这个作业的属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-2/homework/9977 我 ...

  10. C语言I作业08

    C语言I作业08 这个作业属于哪个课程 C语言程序设计ll 这个作业的要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2019-2/homework/9981 ...

随机推荐

  1. phpcms 调取全站文章

    路径:phpcms/module/content/classes/content_tag.class.php 添加如下方法 /** * 列表页标签:主要返回的是主表中数据与附表中数据 * @param ...

  2. CentOS6.5安装iftop

    iftop这个小工具是Linux和unix下的top命令升级版,功能相对较强,界面易懂.今天安装了CentOS6.5的最新版,装个小工具检查下系统运行性能. 官网:http://www.ex-parr ...

  3. #iPhone6与iPhone6Plus适配#如何在Xcode 6中创建 PCH 文件

    本文永久链接http://www.cnblogs.com/ChenYilong/p/4008086.html   新建文件 ⌘+N选择 iOS/Mac -> Other -> PCH Fi ...

  4. FineUI第四天---PageManage的概述

    页面级别的配置PageManager控件的配置 每一个使用FineUI控件的页面都必须包含一个PageManager控件,我们可以把PageManager控件看做页面级别的参数配置(相对于Web.co ...

  5. SGU 180 Inversions(离散化 + 线段树求逆序对)

    题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=180 解题报告:一个裸的求逆序对的题,离散化+线段树,也可以用离散化+树状数组.因为 ...

  6. HDU 1029 Ignatius and the Princess IV

    解题报告: 题目大意:就是要求输入的N个数里面出现的次数最多的数是哪一个,水题.暴力可过,定义一个一位数组,先用memset函数初始化,然后每次输入一个数就将下标对应的上标对应的那个数加一,最后将整个 ...

  7. [Effective JavaScript 笔记]第56条:避免不必要的状态

    API有时被归为两类:有状态的和无状态的.无状态的API提供的函数或方法的行为只取决于输入,而与程序的状态改变无关.字符串的方法是无状态的.字符串的内容不能被修改,方法只取决于字符串的内容及传递给方法 ...

  8. 关于seajs

    (这些文章都是从我的个人主页上粘贴过来的,大家也可以访问我的主页 www.iwangzheng.com) 最近经常听到各种JS前缀的名称,瞬间感觉自己弱爆了,啥都没用过呢,这么下去将来怎么嫁人呢.   ...

  9. cocos2d回忆

    凭借自己的回忆想想看自己都学到了那些知识,这是小学的时候当初中老师的外公给我说的,现在想想,CCDirector,CCNode,CCScene,CCSprite这几个类,然后是坐标,锚点,CCNode ...

  10. 在ubuntu 15.04下安装VMware Tools

    提出问题:在Ubuntu 15. 04版本上,不能实现剪贴板的共享 解决方法:发现没有装VMware Tools 安装VMware Tools步骤 1. 点击菜单栏,虚拟机 → 安装VMware工具 ...