- 博客(30)
- 收藏
- 关注
原创 stl源码简析char_traits.h
stl源码简析char_traits.h掠过之前不重要的东西,直接上代码了 static void assign(char_type& __c1, const char_type& __c2) { __c1 = __c2; } static bool eq(const _CharT& __c1, const _CharT& __c2) { return __c1 == __c2; }
2017-03-28 08:56:50
994
原创 动态链接库与静态链接库的区别
动态链接库与静态链接库的区别1 静态链接库的优点(1) 代码装载速度快,执行速度略比动态链接库快; (2) 只需保证在开发者的计算机中有正确的.LIB文件,在以二进制形式发布程序时不需考虑在用户的计算机上.LIB文件是否存在及版本问题,可避免DLL地狱等问题。 2 动态链接库的优点 (1) 更加节省内存并减少页面交换; (2) DLL文件与EXE文件独立,只要输出接口不变(即名称、参数、返
2017-03-27 15:27:51
903
原创 深度探索c++对象模型读书笔记(一)
深度探索c++对象模型读书笔记(一)1.c++有两种class data menmbers:static 和 nonstatic 三种class menmber functions:static ,nonstatic,virtual2.简单对象模型 每一个member data和member function都由一个指针指向它对象中只存放指针3.表格驱动的对象模型class A{ void*
2017-03-27 15:16:19
840
原创 c++stl vector源码简析
c++stl vector源码简析vector是我们经常用的容易之一,我们现在来简单看一下vector的部分源码理解vector的行为以便我们在使用过程中更得心应手首先看一下vector的alloc基类:template <class _Tp, class _Allocator, bool _IsStatic>class _Vector_alloc_base {public: typedef
2017-03-26 13:46:35
1440
原创 C++线程安全的单例模式
C++线程安全的单例模式首先看一下普通的单例模式实现:class singleton{ public: static singleton* getinstance(){ if(p==null){ p = new singleton(); } return p; } protect: singleton
2017-03-25 21:15:04
500
原创 关于c++中的cin
关于c++中的cin在程序中我们经常看到关于cin这样的用法while(!cin>>val) { ……; }我一开始想知道cin的返回值是什么于是就在网上去搜集资料,后面突然想到cin是istream一个对象,不是一个函数 也就没有什么返回值具体的继承是这样的:接下来我们找到 发现这是一个重载过的运算符点进去看一下如果没有结束符或者输入成功就返回true,否则返回false并且这是
2017-03-25 10:42:47
458
原创 Linux并发回射服务器(二):处理僵死进程
运行三个客户端程序然后非正常结束linux下我们用ps -a命令可以查看当前进程的情况如下解决方法是利用子进程传递给父进程的信号 代码如下:#include<sys/types.h>#include<sys/socket.h>#include<stdio.h>#include<netinet/in.h>#include<arpa/inet.h>#include<unistd.h>#in
2017-03-21 17:59:22
589
原创 Linux回射服务器(一):多进程实现并发
建立连接后创建一个进程来处理每个连接 使用fork()函数创建子进程 服务器端:#include<sys/types.h>#include<sys/socket.h>#include<stdio.h>#include<netinet/in.h>#include<arpa/inet.h>#include<unistd.h>#include<string.h>#include<stdl
2017-03-21 17:34:00
974
原创 几种动态分配内存的方法及区别
1) malloc 函数: void *malloc(unsigned int size) 在内存的动态分配区域中分配一个长度为size的连续空间,如果分配成功,则返回所分配内存空间的首地址,否则返回NULL,申请的内存不会进行初始化。 2)calloc 函数: void *calloc(unsigned int num, unsigned int size) 按照所给的数
2016-04-21 19:48:19
2485
原创 static_cast 的用法
static_cast < type-id > ( expression ) 该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法: ①用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换。 进行上行转换(把派生类的指针或引用转换成基类表示)是安全的; 进行下行转换(把基类指针或引用转换成派生类表示)时,由于没有动态
2016-04-21 10:21:08
1075
原创 指针运算
1.指针自增、自减每次移动的偏移量是指针所指向对象的字节大小2.指针相减的值是指针地址的偏移除以指针每次移位的大小 举例:#include<stdio.h>void main(){ short *p,*q; short arr[15]={0}; p=q=arr; p++; printf("%d,",p-q); printf("%d,",(char
2016-04-19 17:17:31
578
原创 缺省参数
缺省参数是静态绑定的。所以,永远记住: 绝不重新定义继承而来的缺省参数举例:class A{public: virtual void func(int val = 1) { std::cout<<"A->"<<val <<std::endl;} virtual void test() { func();}};class B : public A{publ
2016-04-19 16:45:29
572
原创 多态分类
1.参数多态包括函数模板和类模板2.包含多态 virtualclass A{ virtual void foo() { printf("A virtual void foo()"); }};class B : public A { void foo() { printf("B void foo()"
2016-04-17 10:00:09
531
原创 c++多重继承的内存分布
观察下面一段代码:class ClassA{public: virtual ~ ClassA(){}; virtual void FunctionA(){};};class ClassB{public: virtual void FunctionB(){};};class ClassC : public ClassA,public ClassB{ pu
2016-04-16 10:02:29
1685
原创 c语言中的未定义行为
下列 C 代码中,不属于未定义行为的有_A.Int i=0;i=(i++); B.char *p=”hello”;p[1]=’E’; C.char *p=”hello”;char ch=*p++; D.int i=0;printf(“%d%d\n”,i++,i–); E.都是未定义行为 F.都不是未定义行为正确答案: C A,D:表达式的先后顺序,是由编译器决定的,有可能不同 B:常
2016-04-14 08:56:28
4731
原创 c++默认类型转化
以下代码执行后,val的值是_:unsigned long val = 0;char a = 0x48;char b = 0x52;val = b << 8 | a;正确答案: B A.20992 B.21064 C.72 D.0答案解析: 这里面涉及到了默认类型转换:当出现在表达式里时,有符号和无符号的char和short都会被自动转换为int类型,在需要的情况下,将自动转换为un
2016-04-14 08:49:54
709
原创 字符串&malloc&strlen&strcpy
如下程序用于输出“Welcome to Huawei Test”,请指出其中的两处错误。char * GetWelcome(void){ char * pcWelcome; char * pcNewWelcome; pcWelcome="Welcome to Huawei Test"; pcNewWelcome=(char *)malloc(strlen(pcWelc
2016-04-12 16:57:40
1780
原创 继承虚函数&数组名做参数
#include<iostream>using namespace std;class Base{public: virtual int foo(int x) { return x * 10; } int foo(char x[14]) { return sizeof(x) + 10; }};class Deriv
2016-04-12 16:53:51
497
原创 组合与继承
有这样一个类:class Eye{ public: void Look(void);};现在希望定义一个Head类,也想实现Look的功能,应该使用()方法,实现代码重用。 正确答案: BA.继承 B.组合 C.模板 D.过滤答案解析: 组合是在新类中以原有类的对象作为数据成员,继承是在不改变现有的类的基础上,采用现有类的形式并在其中添加新代码,组合一般用于在新类中使用
2016-04-12 16:45:58
448
原创 构建乘积数组
题目描述给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…A[i-1]*A[i+1]…*A[n-1]。不能使用除法。 思路: 类似于动态规划 用两个数组保存 v1中v1[i]保存前i-1个数的乘积 v1[0]=1 然后从前往后遍历v[i]=v[i-1]*A[i] v2中v2[i]保存后面i+1到n个数的乘积 v2[
2016-04-10 13:08:53
386
原创 正则表达式匹配
题目描述请实现一个函数用来匹配包括’.’和’‘的正则表达式。模式中的字符’.’表示任意一个字符,而’‘表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串”aaa”与模式”a.a”和”ab*ac*a”匹配,但是与”aa.a”和”ab*a”均不匹配思路:用两个指针分别指向字符串和匹配串 如果能够匹配指针后移 不能匹配的情况比较复杂 要考虑有没
2016-04-10 13:02:19
560
原创 表示数值的字符串
题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。 但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。思路:简单的判断class Solution {public: string s; int flag=0; bool i
2016-04-10 12:55:42
476
原创 第一个只出现一次的字符位置
题目描述在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符的位置。若为空串,返回-1。位置索引从0开始 思路: 依次遍历字符串 如果c[100]没有这个字符就把这个字符加入到c[100]中并且count中对应++; 如果c[100]中存在这个字符 则返回下标class Solution {public: int FirstNotRepeati
2016-04-10 12:52:29
417
原创 继承类的大小
在32位操作系统gcc编译器环境下,下面程序的运行结果为()#include <iostream> using namespace std; class A { public: int b; char c; virtual void print() { cout << "this is father’s fuction! " << endl;
2016-04-08 11:21:48
1330
原创 数组名作为函数的参数传递给函数
在32位机器中,如下代码:void example(char acWelcome[]){ printf("%d",sizeof(acWelcome)); return;}void main(){ char acWelcome[]="Welcome to Huawei Test"; example(acWelcome); return;}的输出是?
2016-04-08 11:16:14
1330
原创 math.h的abs返回值()
math.h的abs返回值() 正确答案: C 你的答案: A (错误)A.不可能是负数 B.不可能是正数 C.都有可能 D.不可能是0c中的函数申明为 int abs(int num); 正常情况下, num为0或正数时,函数返回num值; 当num为负数且不是最小的负数时(不要问我最小的int类型负数是多少,上面那个图里面有真相),函数返回num的对应绝对值数,即将内存中该二进
2016-04-08 11:11:47
4596
原创 最短路径的实现
下面是一个带权值的连通图,就用这个图为例子来实现最短路径原理就不在说了 百度上面有 直接从代码开始首先定义头文件和需要的数据map表示带权值的连通图path[i]表示从起点到i路径上所有的顶点 如经过j顶点,则path[i][起点],path[i][j],path[i][i]都为1其余的都为0dis表示从起点到每个顶点的最短路径find表示是否找到起点到其他节点的最短路
2015-10-30 11:27:29
531
原创 对稀疏矩阵压缩后转置
#include#include//define struct Arr{ int i,j; int data;};struct ST{ Arr* data; int i,j,num;};//矩阵压缩 ST* change(int arr[][3],int x,int y){ ST *M; int i,j; int count=0; M=(ST*)mallo
2015-10-29 19:57:42
442
原创 用栈实现括号匹配
输入左括号如'(','['则进栈 右括号如')',']'则从栈里取出一个括号 看着两个括号是否匹配#include#include#define SIZE 6//define the struct of stacktypedef struct stack{ char* element; int top; int size;}Stack;//initialize stack
2015-10-29 19:54:54
676
原创 静态链表的实现
#include#include#define SIZE 6//define struct of static listtypedef struct stlist{ int* content; int* next; int* exist;} StList;StList* initList(StList* tempPtr){ int i; //allocation sp
2015-10-29 19:11:13
1032
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人