- 博客(98)
- 收藏
- 关注
原创 菱形虚拟继承详解
菱形继承是继承里面比较复杂的有一种,在这里我分别对菱形继承、菱形虚拟继承、菱形虚拟继承含虚函数这几种情况要清楚虚表和虚基表是两个完全不同的概念虚表:虚函数表,存的是虚函数->多态虚基表:存的是偏移量,解决二义性和数据冗余性。虚继承解决了在菱形继承里面子类对象包含多分父类对象的数据冗余现象和二义性。
2017-04-16 18:48:54
995
原创 Linu编译器vim的基本操作
一.vim可以分为三种状态:命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode)这里总结了vim里面三种模式下的基本操作,操作非常简单,学会后就可以轻松的在Linux下使用vim编写代码了。
2017-04-10 12:56:01
763
原创 Linux命令find的55种用法实例
find命令 用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。下面是find的55个查找功能选项-amin<分钟>:查找在指定时间曾被存取过的文件或目录,单位以分钟计算;- anewer<参考文件或目录>:查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录;语法: find(选项)(参数)下面是find的55个查找
2017-04-09 22:22:33
1665
转载 Linux中的grep与xargs命令学习笔记
一、grep grep(Global Regular Expression Print)用于在指定文件搜索特定的内容,并将含有这些内容的行标准输出[3]。man文件给出的grep命令格式如下: grep [OPTIONS] PATTERN [FILE...] grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
2017-04-09 21:51:30
1000
原创 Linux进程管理之task_struct
进程的概念从操作系统的层次:进程是程序的一个执行实例;进程是正在执行的程序;进程是能分配处理机并且由处理机执行的实体。这么一说,没有正在执行的程序就一定不是进程吗?不是。假如在单处理机的系统中,一次只能执行一个进程(也就是说,一次只能有一个进程处于运行状态),那么其他的被加载到内存的程序(已经获得了除处理机之外的所需的全部资源),也是进程。从内核的层次:担当分配系统资源(包括内存等)的实体
2017-04-09 17:24:02
605
转载 Linux进程描述符task_struct结构体详解
本文为博主原创文章 && 转载请著名出处 @ http://blog.csdn.net/gatieme进程是处于执行期的程序以及它所管理的资源(如打开的文件、挂起的信号、进程状态、地址空间等等)的总称。注意,程序并不是进程,实际上两个或多个进程不仅有可能执行同一程序,而且还有可能共享地址空间等资源。Linux内核通过一个被称为进程描述符的task_struct结构体来管理进程,
2017-04-09 16:38:08
1747
原创 三种方法实现如何不用循环实现1+...+n?
三种方法实现如何不用循环实现1+...+n?如何不用循环实现1+...+n?这道题目是一道面试题,至于为什么要这样问,用循环解决1加到n岂不是更高效,也是为了锻炼一下思维,看你能想到几种。这里用递归和模板还有构造函数三种方法实现。
2017-04-09 15:52:56
2289
原创 C++中继承与虚继承
一.继承的关系及继承访问限定符继承是面向对象复用的重要手段。通过继承定义一个类,继承类型之间的关系模型,共享共有的东西,实现各自本质的不同的东西下面是三种继承关系下基类成员在派生类中的访问变化那么private和protected都是限定直接访问,那么他们有什么区别?先看下面这个单继承代码在作解释:#includeusing namespace std;c
2017-04-07 13:23:06
812
原创 CentOs下安装gcc/g++/gdb
Centos支持使用yum安装,安装软件一般格式为yum install .......,注意安装时要先成为root用户,且在联网的状态下。使用yum安装gcc:yum install gcc即可。使用:which gcc 查看是否安装成功使用yum安装g++:yum install gcc-c++ 即可。使用:which g++ 查看是否安装成功
2017-04-06 23:19:06
105378
3
转载 Linux系统图形化安装教程
这里讲的是linux系统怎么安装,步骤很详细,可以在网上下好安装包,然后看着博客一步一步安装,图形化讲解很详细如下图选择ios文件,点击确定
2017-03-31 19:08:19
1890
原创 C++面试题之模拟实现string类
C++中的string类是一个很常见的面试题,string类里必须有的构造函数,拷贝构造,赋值运算符重载,析构函数等成员函数,下面看看是如何实现以及如何处理动态内存 写时拷贝技术是通过"引用计数"实现的,因为浅拷贝的缺陷,所以在这个时候我们就引入了引用计数的拷贝。但是当其中一个对象改变它的值时,其他对象的值就会随之改变,所以此时我们采取这样一种做法,就是写时拷贝。写时拷贝指用浅拷贝的方法拷贝其他对象,多个指针指向同一块空间,只有当对其中一个对象修改时,才会开辟一个新的空间给这个对象,和它原来指向同一空间
2017-03-27 19:36:42
1286
原创 Linux文件和目录粘滞位权限的使用与设置
文件的粘滞位(sticky)位是作什么用的? 粘滞位(Stickybit),又称粘着位,是Unix文件系统权限的一个旗标。最常见的用法在目录上设置粘滞位,也只能针对⽬录设置,对于⽂件⽆效。则设置了粘滞位后,只有目录内文件的所有者或者root才可以删除或移动该文件。如果不为目录设置粘滞位,任何具有该目录写和执行权限的用户都可以删除和移动其中的文件。实际应用中,粘滞位一般用于/tmp目录,以防止普通用户删除或移动其他用户的文件。
2017-03-27 13:19:16
3751
转载 C++--String类型各种重载函数的实现
#include #include #include #include using namespace std; class String { friend bool operator == (const String &,const String &); friend bool operator !=
2017-03-26 22:12:03
2239
原创 Linux下文件的ACM三个时间分别代表什么?如何修改?
我们通过stat指令可以得到关于创建的文件的相关信息,其中在上面File表示文件,后面接文件名;然后是Blocks表示块,IO Blocks表示IO块, 是普通文件,大小为0。下面我们主要还是要看一下Access,Modify和Change这三种时间分别代表的意思:AccessModify
2017-03-21 22:57:50
1168
1
原创 Linux进入目录、创建文件、显示文件分别需要什么权限?
综上所述,在普通用户下,若想进入一个目录需要可执行权限 在超级用户下,目录不管具有什么权限都可以进入综上所述:在超级用户下,不管目录对拥有者是否开放权限,都可以在目录下创建文件 在普通用户下,要在目录下创建文件,需要目录...
2017-03-20 22:21:22
7694
1
原创 深入剖析c++动态内存管理
它们都是动态管理内存的入口,malloc / free是CC++标准库的函数,new/ delete是C++操作符。为什么C++要使用new / delete 而不使用malloc/free?因为 malloc / free只是动态分配内存空间释放空间。而new/ delete除了分配空间还会调用构造函数和析构函数进行初始化与清理(清理成员),而且malloc/frec需要手动计算类型大小且返回值会void", new / delete可自己计算类型的大小,返回对应类型的指针。下面剖析new /
2017-03-14 14:32:13
446
原创 深、浅拷贝构造函数
#includeusing namespace std;class Array{public: //构造函数 Array(int sz) :_sz(sz) , _ptr(new int[_sz]) { cout << "Array" << endl; } ////浅拷贝构造函数 //类成员变量有动态开辟,然后p1._str和p2._str指向
2017-03-13 18:19:45
410
原创 运算符重载的分析及代码实现
这面是一些运算符重载的代码,其中的注释是对函数调用返回及运算符重载的解释,帮助理解#define _CRT_SECURE_NO_WARNINGS 1#include#include#include#includeusing namespace std;//运算符重载class Complex{private: double _real; double _imag
2017-03-09 19:41:49
598
原创 带环单链表及链表相交问题的分析及代码实现
首先,我们怎样检测一个单链表是否带环?1.检测单链表是否带环 如果链表不带环,可以通过遍历链表找到尾节点;那如果单链表带环,就找不到链表得到尾部了,如果遍历一个带环链表,程序就会陷入死循环。 那怎么办呢? 可以利用快慢指针的思想。定义两个指针都指向链表的头指针,然后遍历链表,让一个指针每次走两个节点,让另一个指针每次走一个节点,这样两个指针再
2017-03-09 19:26:46
998
原创 有关单链表的面试题分析及代码实现
1.删除无头单链表的非尾结点 2.逆置/翻转单链表 3.在无头单链表的一个非头结点前插入一个节点 4.查找链表中间节点 5.删除单链表的倒数第K个节点(k>1&&k<链表长度)时间复杂度为O(N); 6.逆序打印单链表
2017-03-02 17:50:18
486
原创 约瑟夫环问题的解释及代码实现
解决问题的核心步骤:(程序的基本算法) 1.建立一个具有n个链结点,无头结点的循环链表; 2.确定第1个报数人的位置; 3.不断地从链表中删除报数报到指定数num的那个人的链结点,直到链表剩一个节点。 pNode JosephCycle(pList* pplist, int num) //pplist是传进来的带环链表,num为出列者喊到的数
2017-03-01 18:40:20
11280
原创 C++中引用与指针的区别与联系
C++中引用与指针的区别与联系:1.引用只能在定义时初始化一次,之后不能再改变引用的指向(从一而终);而指针的值可以随意改变。所以指针比引用灵活。2.引用必须指向有效的变量,指针可以为空。3.sizeof指针和sizeof引用的意义不一样。 sizeof引用的意义是引用指向的变量的大小;而sizeof指针的意义是指针指向的地址的大 小,32位平台下是4,64位平台下是8.
2017-03-01 16:50:21
334
原创 VS2013控制台程序运行一闪而过的最佳解决办法
有些人会给程序最后加一句 system("pause"); 但是我发现加上这条语句虽然可以让窗口在最后停下来,但是在c++程序里不能打印出最后析构函数里想输出的内容。所以推荐使用下面的方法,配置一下编译器设置。配置方法:项目——>属性——>配置属性——>连接器——>系统——>子系统(subSystem), 然后将值配置为“控制台(/SUBSYSTEM:CONSOLE)” 。 确定返回就ok了
2017-02-28 17:34:39
11175
8
转载 线性表之顺序表与单链表的区别及优缺点
这里比较的是是基于C语言实现的顺序表与单链表,与其他语言的实现可能会有差异,但我相信语言是相通的,它们的实现机制应该也差不多。 1、What 什么是顺序表和单链表 ①顺序表: 顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。只要确定了起始位置,表中任一元素的地址都通过下列公式得到:LOC(ai)=LOC(a1)+(i-1)*L
2017-02-22 12:56:27
1157
原创 【笔试题】位断的压缩存储问题
#include#include#pragma pack(4)int main(){ unsigned char puc[4]; struct tagPIM //位断大小占2个字节 { unsigned char ucPiml; //1 unsigned char ucData0 : 1; //1 unsigned char u
2017-02-16 22:59:57
622
原创 【笔试题】整型提升加法
在X86,vc++6.0环境下,有下列程序#includeint main(){ char c; unsigned char uc; unsigned short us; c = 128; uc = 128; us = c + uc; printf("0x%x ", us); us = (unsigned char)c + uc; printf("0x%x ", us
2017-02-16 18:54:57
676
原创 【笔试题】有关大小端问题
#include<stdio.h>void main(){ union { short k; char i[2]; }*s, a; s = &a; s->i[0] = 0x39; s->i[1] = 0x38; int q = a.k; printf("%x\n", q); //int i = 0x12345678; //printf("%0x\n",i); system("pause");}
2017-02-16 17:35:57
1103
原创 测试系统是大段还是小端存储的c代码
我们知道联合体是内部的所有成员都是共享内存的,所有成员的起始地址都是一样的。则若是小端存储则int a的第一个字节就是char c,若是大端存储char c != 1;#include #include union hehe { int a; char c; }un; int main() { un.a = 1;
2017-02-15 19:27:32
733
原创 模拟qsort库函数
#include#include#includevoid my_swap(char *buf1,char *buf2,int sz){ int i = 0; for (i = 0; i < sz; i++) { char temp = buf1[i]; buf1[i] = buf2[i]; buf2[i] = temp; }}void bubble_sort(vo
2017-02-13 23:11:53
313
原创 结构体、联合体和位断的内存对齐问题
结构体(struct)内存对齐规则:1.第一个成员在与结构体变量偏移量为0的地址处。2.其它成员变量要对齐到某个数字(对齐数)的整数倍的地址处。 //对齐数=编译器默认的一个对齐数与该成员大小的一个较小值 Vs中默认的对齐数是8 Linux中默认的对齐数是43结构体总大小:最大对齐数(每个成员变量的除了第一个成员都有一个对对齐数)的整数倍。(每个成员变量在对 齐之后,把成员大小加起来,再扩大到最大对齐数的整数倍)4.如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的
2017-02-08 23:15:53
2615
原创 C语言中整形在计算机中的存储
整形包括字符、短整形、整形、长整形,整形的存储方式都是一样的,整形在存储时都是以补码进行存储的。下面用char来解释: signed char -128 到127unsigned char 0 到 255short int -32768 到32797unsigned short int 0 到65
2017-02-05 23:24:14
1709
原创 C语言中浮点数在计算机中的存储
V=(-1)^S*M*2^E (1)(-1)^S表示符号位,当S = 0,V为正;当S = 1,V为负;(2)M为有效数字,因为M是二进制,大于等于1,小于2。(3)2^E表示指数位
2017-02-05 22:59:33
984
转载 VS2013密钥-所有版本
Visual Studio Ultimate 2013 KEY(密钥):BWG7X-J98B3-W34RT-33B3R-JVYW9Visual Studio Premium 2013 KEY(密钥):FBJVC-3CMTX-D8DVP-RTQCT-92494Visual Studio Professional 2013 KEY(密钥): XDM3T-W3T3V-MGJWK-8BFVD-GVPKYTeam Foundation Server 2013 KEY(密钥):MHG9J-HHHX9-WWPQP
2017-02-05 22:58:13
1817
原创 可变参数列表用法及原理
可变参数列表是通过下面这四个宏来实现的,这些宏定义在Stdarg.h头文件va_list Nameva_start(Name, val)va_arg(Name, type)va_end(Name) va_list Name声明一个va_list类型的变量,它用于访问参数列表的未确定部分。 va_start(Name, val)Name这个变量是调用va_li
2017-01-26 16:17:28
560
原创 栈帧详解———函数调用原理
前言:我们知道调用函数对这个函数传参时,形参实例化时会形成一份临时拷贝,在函数返回时这些临时拷贝又被释放;那么调用函数时这些参数是如何保存、被保存在哪里?又是如何释放的呢?在调用函数返回时是如何返回的?返回值是通过什么返回?类似的这些函数调用问题都可以通过栈帧原理解释 下面我通过一些简单的实例来分析函数调用原理------栈帧 首先应该明白,栈是从高地址向低地址延伸的。每个函数
2017-01-25 21:40:44
1287
1
原创 【C命令行参数】main函数的参数含义
C中的命令行参数又叫位置参数,它可以被传到程序里面,派各种用途我们先来看main函数的参数int main( int argc, char *argv[ ], char *envp[ ] ){program-statements} main()函数的参数就是通过命令行来进行传参的;vs2013传参方式:项目->属性->配置属性->调试->命令行参数,然后进行
2017-01-23 13:58:48
2100
原创 【C语言】宏定义的用法总结
#define函数#define DEBUG(x) ((x)+(x))如上所示,用于对数值表达式进行求值的宏定义都应该用这种方式加上括号,避免在使用宏时由于参数中的操作等或邻近操作符之间不可预料的相互作用。 #define替换1.在调用宏时,首先对参数进行检查,看看是否包含任何由#define定义的符号,如果是,它们首先被替换。2.替换文本随后被插入到程序中
2017-01-22 18:09:14
1007
原创 【c语言】模拟实现memcpy()、memmove()函数
//memcpy1.memcpy和memmove可对内存中任何数据类型进行拷贝,但strcpy仅可以对字符串进行拷贝;2.memcpy函数原型:void* memcpy(void *dst,const void* src,size_t n);从源src所指内存的起始地址开始拷贝n个字节到目标dst所指向的起始地址。3.memmove函数原型和memcpy函数原型是一
2017-01-14 18:42:08
478
原创 【C语言】模拟实现strcmp()、strncmp()函数
//strcmp函数原型:int strcmp(const *string1,const char *string2);参数说明:string1为第一个要比较的字符串,string2为第二个要比较的字符串 函数功能:比较字符串str1和str2的大小。 返回说明:返回整数值:当str1时,返回值; 当str1=
2017-01-14 18:33:59
1863
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅