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. TCP protocol

    he characteristics of TCP protocol TCP (which means Transmission Control Protocol) is one of the mai ...

  2. Android新版本SDK打开旧版本项目报错解决

    1.Description Resource Path Location Type Unable to resolve target 'android-19 解决:打开project.properti ...

  3. NDK xxxxx could not be resolved解决方法

    Type '*****' could not be resolved Method '******' could not be resolved     问题解决   以下为未尝试方法,如果上面方法解 ...

  4. [HDOJ1827]Summer Holiday(强连通分量,缩点)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1827 缩点后统计入度和当前强连通分量中最小花费,然后记录入度为0的点的个数和花费和就行了. /* ━━ ...

  5. JQuery Ajax 在asp.net中使用小结

    自从有了JQuery,Ajax的使用变的越来越方便了,但是使用中还是会或多或少的出现一些让人短时间内痛苦的问题.本文暂时总结一些在使用JQuery Ajax中应该注意的问题,如有不恰当或者不完善的地方 ...

  6. ionic安装拍照选照片插件

    1.安装插件,也可以用ionic plugin add .... phonegap local plugin add https://git-wip-us.apache.org/repos/asf/c ...

  7. [反汇编练习] 160个CrackMe之019

    [反汇编练习] 160个CrackMe之018. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...

  8. Brew 编译mod错误Error: L6265E: Non-RWPI Section libspace.o(.bss) cannot be assigned to PI Exec region ER_ZI

    Error: L6265E: Non-RWPI Section libspace.o(.bss) cannot be assigned to PI Exec region ER_ZI.: Error: ...

  9. LeetCode Triangle 三角形(最短路)

    题意:给一个用序列堆成的三角形,第n层的元素个数为n,从顶往下,每个元素可以选择与自己最近的两个下层元素往下走,类似一棵二叉树,求最短路. [], [,4], [6,,7], [4,,8,3] 注意: ...

  10. git - svn 平滑到 git

    1. 建立自己的git仓库,需要是空git仓库 2. checkout 你的 git仓库 3. svn忽略.git文件,忽略.git  .gitignore 4. 把 .git文件拷到你的 svn仓库 ...