homework_08
一.C++变量的作用域和生命周期
上面的程序中第一个正整数a的作用域是整个程序,而第二个正整数a的作用域是大括号内,除了大括号它的生命周期就结束了。因此先输出的是2,而后输出的是1.
二.理解堆和栈,两种内存的申请和释放的方式
栈区,局部存在,系统分配,作用周期在两个花括号之间(或函数体or其他结构体),进入花括号,操作系统会在栈中开辟一些空间,esp指针减少,称为入栈,当退出花括号,系统会释放分配的栈之内存,esp指针增加,恢复到入花括号之前的状态,称之为出栈。
堆区,全局存在,程序员主动申请,主动释放,如果不释放,导致内存不足,于一个常驻进程内存泄漏,导致程序异常,无法继续申请内存,当程序结束后,此部分内存由操作系统收回。
#include <stdio.h>
int gv;
int main()
{
const char * cvchar="hello";
static int mvar = ;
int a,b;
{
int x = ;
char * p = (char *)malloc();
printf("%s");
free(p);
}
}
这里特别说明,p指针所占的四个字节的空间为栈区,而p指针所指向的分配空间内存(即15个字节的内存)为堆区。
三.理解unique_ptr和shared_ptr
unique_ptr之间不会分享它的指针,它不能被复制到另一个unique_ptr,不能按值传递给一个函数,也不能应用在任何需要复制操作的标准模板库(STL)的算法上。unique_ptr只能被移动。这意味着,存储器资源的所有权被转移给另一个unique_ptr,原始的unique_ptr不再拥有所有权。我们在使用中最好限制一个所有权拥有者只能拥有一个对象,因为多种所有制增加了程序逻辑的复杂性。当我们需要一个智能指针指向一个普通的C ++对象,可以使用unique_ptr,当我们构建unique_ptr时,可以使用make_unique辅助函数。
shared_ptr是一种应用在C+ +标准库专为场景中可能同时有多个所有者来管理内存中对象的寿命的智能指针。初始化一个shared_ptr后,你可以复制它,通过函数参数传值,将其分配给其他shared_ptr的实例。所有shared_ptr实例指向同一个对象,共享访问“控制块”。当有新的智能指针加入、退出或是复位,控制块计数器做出相应改变。当控制块引用计数达到零,则控制块中删除相应的内存资源还有它本身。
四.请尝试用“C++0x”,“C++11 & STL”两种不同的代码风格分割一个url,并上传代码到博客上。
"C++0x":
#include "stdafx.h"
#include <iostream>
#include <string.h>
#pragma warning(disable:4996)
using namespace std; class address
{
public:
void input()
{
cout<<"请输入url地址:"<<endl;
cin>>url;
}
void process()
{
const char *d = "/:.";
char *p;
p=strtok(url,d);
while(p)
{
printf("%s,",p);
p=strtok(NULL,d);
}
}
private:
char url[100];
}; int _tmain(int argc, _TCHAR* argv[])
{
address url;
url.input();
url.process();
system("pause");
return 0;
}
使用了strtok函数进行分割,考虑了中文字符的情况以及ftp,site的情况。截图如下:
C++ 11&STL:
#include "stdafx.h"
#include <iostream>
#include <string>
#include<vector>
using namespace std; class address
{
public:
void input()
{
cout<<"请输入url地址:"<<endl;
cin>>url;
}
void process(string split)
{
std::string::size_type pos;
url+=".";
int size=url.size();
for(int i=;i<size;i++)
{
pos=url.find_first_of(split,i);
if(pos<size)
{
string s=url.substr(i,pos-i);
result.push_back(s);
if(pos+==size)
break;
i=url.find_first_not_of(split,pos)-;
}
}
}
void output()
{
for(int i=;i<result.size();i++)
{
cout<<result[i]+",";
}
}
private:
vector<string> result;
string url;
};
int main()
{
address URL;
string s="/:.";
URL.input();
URL.process(s);
URL.output();
system("pause");
return ;
}
使用的是string类。
homework_08的更多相关文章
随机推荐
- IIS Web服务器支持高并发设置
适用的IIS版本:IIS 7.0, IIS 7.5, IIS 8.0 适用的Windows版本:Windows Server 2008, Windows Server 2008 R2, Windows ...
- POJ 水题若干
POJ 3176 Cow Bowling 链接: http://poj.org/problem?id=3176 这道题可以算是dp入门吧.可以用一个二维数组从下向上来搜索从而得到最大值. 优化之后可以 ...
- IS_ERR、PTR_ERR、ERR_PTR
最近在使用filp_open打开文件时遇到到一个问题,当打开一个并不存在的文件时,filp_open返回值值为0xfffffffe,而并不是0(NULL),这是因为内核对返回指针的函数做了特殊处理.内 ...
- ios绘图时的坐标处理
在iOS中,进行绘图操作时,一般主要是在UIView:drawRect中调用 UIGraphicsBeginImageContextWithOptions等一系列函数,有时候直接画图就行,比如UIIm ...
- Android Activity形象描述
Activity就是形象的说就是一个容器,在里面放置各种控件(按钮,文本,复选框等),就形成了软件的界面~ Activity是可见的,如果不加任何控件的话,那么就像Windows中的空白窗体一样 通过 ...
- 删除 GPT 保护分区
问题: 将内置和/或外置硬盘连接到 Windows XP 32 位操作系统时,将无法访问硬盘,“磁盘管理”将会报告该硬盘包含 GPT 保护分区.在此状态下,将无法对硬盘进行重新分区和格式化. 原因: ...
- CFF前端沙龙总结
一. -OOCSS + Sass ——大漠 1. OOCSS 结构<=>皮肤 分离 容器<=>内容 分离 2. Sass 工具.处理器 SCSS(CSS风格)<=> ...
- gulp 使用mailgun服务器发送邮件
1.首先你需要创建一个 mailgun 账户,没有请去注册一个. 注册之后会有 mailgun 会给你一个默认的子域名,你就可以使用这个子域名去发送邮件了,如下图: 2.gulp创建任务: var s ...
- hdu 4941 Magical Forest ( 双重map )
题目链接 题意: 有一个n*m的田地,里边有k棵树,每棵树的位置为(xi,yi),含有能量值ci.之后又q个询问,分三种; 1)1 a b,将a行和b行交换 2)2 a b,将a列和b列交换 3)3 ...
- UVa 1638 (递推) Pole Arrangement
很遗憾,这么好的一道题,自己没想出来,也许太心急了吧. 题意: 有长度为1.2.3...n的n个杆子排成一行.问从左到右看能看到l个杆子,从右往左看能看到r个杆子,有多少种排列方法. 分析: 设状态d ...