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. mongodb管理工具rockmongo

    mongodb的图像管理工具非常之多,我用的是rockmongo. RockMongo 是一个PHP5写的MongoDB管理工具. 主要特征: 使用宽松的New BSD License协议 速度快,安 ...

  2. 解决eclipse maven 项目重新下载包这个问题

    问题:eclipse项目使用maven下载依赖包,但是有时候断网什么来着就不会自动下载了,挺蛋疼了. 所以,需要我们重新更新项目下载呢. 首先是要在maven的conf文件下setting.xml配置 ...

  3. cmd修改系统时间

    time 11:15:00  修改时间 date 2015/11/25  修改日期

  4. AutoResetEvent

    private static readonly AutoResetEvent autoResetEvent = new AutoResetEvent(false); private static vo ...

  5. Windows Tomcat 安装

    JDK的安装可以参考 http://www.cnblogs.com/emanlee/p/3702535.html ,然后安装apache-tomcat step1:http://tomcat.apac ...

  6. [POJ3279]Fliptile(开关问题,枚举)

    题目链接:http://poj.org/problem?id=3279 题解:http://www.cnblogs.com/helenawang/p/5538547.html /* ━━━━━┒ギリギ ...

  7. [HDOJ2586]How far away?(最近公共祖先, 离线tarjan, 并查集)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2586 这题以前做过…现在用tarjan搞一发…竟然比以前暴力过的慢………… 由于是离线算法,需要Que ...

  8. Android studio编译之后显示中文乱码的问题解决办法

    在build.gradle文件中加上 android {compileOptions.encoding = "GBK"}

  9. java6 新特新

    JAVA6新特性介绍   1. 使用JAXB来实现对象与XML之间的映射 JAXB是Java Architecture for XML Binding的缩写,可以将一个Java对象转变成为XML格式, ...

  10. bzoj1997: [Hnoi2010]Planar

    2-SAT. 首先有平面图定理 m<=3*n-6,如果不满足这条件肯定不是平面图,直接退出. 然后构成哈密顿回路的边直接忽略. 把哈密顿回路当成一个圆, 如果俩条边交叉(用心去感受),只能一条边 ...