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

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

局部变量分为动态局部变量和静态局部变量,其共同点为作用域均为定义它的函数体或语句块,其不同点为其生命周期不同,动态局部变量的生命周期较短,例如在函数中定义,其生命周期会随着函数的结束而结束,例如:

void heiheitian()
{
int i=;
cout<<i++<<endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
heiheitian(); //输出0
heiheitian(); //输出0
return ;
}

dynamic

而静态局部变量的生命周期较长,为整个一个程序,例如:

void heiheitian()
{
static int i=;
cout<<i++<<endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
heiheitian(); //输出0
heiheitian(); //输出1
return ;
}

static

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

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

栈是由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区,存储的变量通常是局部变量、函数参数等。

堆是由new分配的内存块,它们的释放编译器不去管,需要由我们手动去控制,一般一个new需要有一个delete相对应。如果没有delete,会造成内存泄露。

int _tmain(int argc, _TCHAR* argv[])
{
int *p=new int[];
/*在栈内存中存放了一个指向一块堆内存的指针p
程序会先确定在堆中分配内存的大小(int[5]),然后调用
operator new分配内存,然后返回这块内存的首地址放入栈中*/
delete []p; //及时释放堆中的内存
return ;
}

stack and heap

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和shared_ptr为智能指针,unique_ptr持有对对象的独有权,即两个unique_ptr不能指向一个对象,不能进行复制操作,只能进行移动操作,当unique_ptr失效时,其指向的对象也被释放;shared_ptr持有对对象的共享权,指向此对象的指针每多一个,系统内部的计数器就加1,指针每失效一个,系统内部的计数器就减1,当计数器减到0时,此对象被释放。

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. 代码风格

代码如下:

#include "stdafx.h"
#include<iostream>
#include<vector>
#include<string>
using namespace std;
#define maxlength 100 void Split(string s,char splitchar1,char splitchar2,char splitchar3,vector<string>& vec)
{
if(vec.size()>)
vec.clear();
int length=s.length();
int start=;
for(int i=;i<length;i++)
{
if((s[i]==splitchar1||s[i]==splitchar2||s[i]==splitchar3)&&i==)
start+=;
else if(s[i]==splitchar1||s[i]==splitchar2||s[i]==splitchar3)
{
vec.push_back(s.substr(start,i-start));
start=i+;
}
else if(i==length-)
vec.push_back(s.substr(start,i+-start));
}
}
int _tmain(int argc, _TCHAR* argv[])
{
cout<<"请输入url:"<<endl;
string s;
getline(cin,s);
vector<string> vec;
Split(s,'/','.',':',vec);
for(int i=;i<vec.size()-;i++)
{
if(vec[i]!="")
cout<<vec[i]<<",";
}
cout<<vec[vec.size()-]<<endl;
return ;
}

url_split

截图如下:

work_7的更多相关文章

  1. Java常用工具类练习题

    1.请根据控制台输入的特定日期格式拆分日期 如:请输入一个日期(格式如:**月**日****年) 经过处理得到:****年**月**日 提示:使用String的方法indexOf.lastIndexO ...

随机推荐

  1. Struts2+JSON+JQUERY DEMO

    看到别人用了Struts2和JSON,自己也想练练手.记录下练习过程中遇到的问题,以便参考. 使用Maven新建项目: 先挂上pom.xml <project xmlns="http: ...

  2. 1651. Shortest Subchain(bfs)

    1651 终于A了 看这题容易想到最短路 看到错的很多 还特意注意了好几处 后来发现 必须按给出的顺序出边 想了想 这不就是BFS 然后就是各种细节 i->i+1ori->j(a[i]== ...

  3. Nodejs express中创建ejs项目 error install Couldn't read dependencies

    最近在看<Node.js开发指南>,看到使用nodejs进行web开发的时候,准备创建ejs项目遇到问题了   书上命令为:   express -t ejs microblog 可是执行 ...

  4. UVa 11774 (置换 找规律) Doom's Day

    我看大多数人的博客只说了一句:找规律得答案为(n + m) / gcd(n, m) 不过神题的题解还须神人写.. We can associate at each cell a base 3-numb ...

  5. WDF模型驱动程序开发

    WDF驱动程序开发 1. 引言 设备驱动程序是硬件设备连接到计算机系统的软件接口,任何设备都必须有相应的驱动程序才能在计算机系统上正常工作.设备驱动程序的优劣直接关系到整个系统的性能和稳定性,因此,设 ...

  6. ORACLE 全局索引和本地索引

    Oracle数据库中,有两种类型的分区索引,全局索引和本地索引,其中本地索引又可以分为本地前缀索引和本地非前缀索引.下面就分别看看每种类型的索引各自的特点. 全局索引以整个表的数据为对象建立索引,索引 ...

  7. 【转】iOS 通过xib自定义UITableViewCell【原创】

    原文网址:http://blog.it985.com/9683.html 在使用tableView的时候,如果cell的布局过于复杂,通过代码搭建的话不够直观.并且要不停的调整位置,字体什么的.这时, ...

  8. ECSHOP seo修改建议

    ECSHOP是一个非常优秀的商城程序,以丰富的模板.稳定开源.非常快的执行速度赢得广大网店主的青眯.可是新建站30多天,目前百度只收录了首页,而google收录正常.我检查了他的网站一切正常,没有任何 ...

  9. YUV采样及存储格式

    YUV,分为三个分量,“Y”表示明亮度(Luminance或Luma),也就是灰度值:而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素 ...

  10. 我们究竟什么时候可以使用Ehcache缓存

    一.Ehcache是什么 EhCache是Hibernate的二级缓存技术之一,可以把查询出来的数据存储在内存或者磁盘,节省下次同样查询语句再次查询数据库,大幅减轻数据库压力. 二.Ehcache的使 ...