- 博客(31)
- 收藏
- 关注
原创 代码实现 由二叉树的先序遍历和中序遍历推出后序遍历
1 #include 2 3 using namespace std; 4 5 #define MAX 100 6 7 char preOrder[MAX] = {'A','B', 'D', 'E', 'G', 'C', 'F'}; 8 char inOrder[MAX] = {'D', 'B', 'E', 'G
2013-09-14 10:45:33
1069
转载 梯度下降法(一)入门
梯度下降法是一个一阶最优化算法,通常也称为最速下降法。我之前也没有关注过这类算法。最近,听斯坦福大学的机器学习课程时,碰到了用梯度下降算法求解线性回归问题,于是看了看这类算法的思想。今天只写了一些入门级的知识。我们知道,函数的曲线如下:编程实现:c++ code[cpp] view plaincopy
2013-07-18 15:59:35
767
转载 梯度下降算法
引用这篇博文;主要是因为它介绍的机器学习中概念性知识(通俗易懂),以后会经常见到。例如: 回归 特征 模型(拟合的函数) 输入数据的维数(特征的个数) 训练数据(训练集、样本)后面介绍的梯度下降算法不是很好懂。回归与梯度下降: 回归在数学上来说是给定一个点集,能够用一条曲线去拟合(描绘)之,如果这个曲线是一条直线,那就被称为
2013-07-18 15:58:33
736
原创 你熟悉构造函数的调用吗?
#include using namespace std;class Base { friend ostream& operator<<(ostream &os,Base &b);public: Base() { cout << "Base()" << endl; } ~Base() { cout << "~Base()" << endl; } Base(const B
2013-04-19 11:31:14
669
转载 公司中 C和C++程序员进阶之路
从一次考试说起。2010年10月份,综合部邀请我给新入职3个月的员工草拟考试试题,这些同事大部分在公司做的实习,算起来至少也有5、6个月的工作经验了吧。试题的内容,是针对日常需要面对的问题出的案例,比如,查找文件、修改下权限等,其中最后20分题,就是按要求在屏幕上输出一个由数字组成的菱形。说这些无非是想说明,考题比较简单。但考试的结果却是,有人得到80多分,有人得到20多分,相互间
2013-04-18 22:54:38
1824
原创 Linux进程间通信(IPC)
linux下进程间通信的几种主要手段简介:管道(Pipe)及有名管道(named pipe,又称为FIFO):管道可用于具有亲缘关系进程间的通信。有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身。报文
2013-04-18 21:18:54
490
原创 C内存重叠问题,memcpy,memmov,strcpy
memcpy,memmove:它们都是从src所指向的内存中复制count个字节到dst所指内存中,并返回dst的值。当源内存区域和目标内存区域无交叉时,两者的结果都是一样的。但有交叉时不一样。源内存和目标内存交叉的情况有以下两种:(左边为低地址)即:dstsrc针对第一种交叉情况情况,dstsrc,memcpy和memmove的结果是一样的。请看下面的例子讲解:int
2013-04-17 17:26:19
1226
转载 [C++]关于指针作为函数参数传递
【例1】Test函数的语句GetMemory(str, 100)并没有使str获得期望的内存,str依旧是NULL,为什么?-----------------------------------------------------------------------------------------------------------------------------------v
2013-04-17 15:02:01
789
转载 详解结构体、类等内存字节对齐
先说个题外话:早些年我学C程序设计时,写过一段解释硬盘MBR分区表的代码,对着磁盘编辑器怎么看,怎么对,可一执行,结果就错了。当时调试也不太会,又根本没听过结构体对齐这一说,所以,问题解决不了,好几天都十分纠结。后来万般无奈请教一个朋友,才获悉可能是结构体对齐的事,一查、一改,果真如此。 问题是解决了,可网上的资料多数只提到内存对齐是如何做的,却鲜有提及为什么这样做(即使提,也相当简
2013-04-11 10:57:43
536
转载 百度实习生笔试面试经历总结
前序:百度公司每年在5月份左右开始暑期实习生招聘,9,10月份进行校园招聘,4月中旬在网上进行了百度实习生网申,投的是C++岗位,经过半个多月的突击准备,刚刚结束了笔试,技术一面,技术二面和HR三面,中午刚回来,现在还在等待结果中……今天想通过这篇博客,总结一下自己在这次百度实习生笔试和面试过程中的一些心得体会,希望和大家一起交流一下。 笔试:时间2012-5-6 10:00
2013-04-11 09:17:57
1539
转载 数据库索引和B-tree的联系
一、引言数据库索引是什么样的?聚集索引与非聚集索引有什么不同?数据库索引使用最多的数据结构是什么?二、B-Tree我们常见的数据库系统,其索引使用的数据结构多是B-Tree或者B+Tree。例如,MsSql使用的是B+Tree,Oracle及Sysbase使用的是B-Tree。又不懂的可以看我的另外一篇博客http://blog.youkuaiyun.com/glx2012/article/det
2013-04-08 19:03:23
1825
转载 B树(即B-tree)、B+树、B*树
具体讲解之前,有一点,再次强调下:B-树,即为B树。因为B树的原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树,其实,这是个非常不好的直译,很容易让人产生误解。如人们可能会以为B-树是一种树,而B树又是一种一种树。而事实上是,B-tree就是指的B树。特此说明。B-树 是一种多路搜索树(并不是二叉的): 1.定义任意非叶子结点最多只有M
2013-04-08 18:28:09
755
原创 字符串常量放在内存中的静态存储区
一、在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。堆:就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回
2013-04-08 13:39:15
1541
原创 Singleton 考虑内存的释放和多线程
GOF的《设计模式》中这样描述:保证一个类仅有一个实例,并提供一个访问它的全局访问点。通常我们可以让一个全局变量使得一个对象被访问,但它不能阻止你实例化多个对象。一个最好的办法是,让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法。也就是说,很多时候我们需要全局的对象,如一个工程中,数据库访问对象只有一个,这时,可以考虑使用单例模式。单例
2013-04-08 10:45:55
1194
原创 总结C++中的一些特殊情况
1. 当x为负的奇数时,右移位和除法运算的结果不相等。其他(正数、负偶数)情况一样。 因为负数在内存中是以补码的方式存储的2. char *str = "microsoft";cout cout 输出的是整个字符串(比较特殊,不明白为什么)3. strlen遇到/0的时候结束。和sizeof的区别。#include #include using
2013-04-07 17:21:57
633
转载 堆和栈的区别
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack): 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap): 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链
2013-04-07 11:27:18
454
原创 进程和线程的区别和联系
进程(process)是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位。每个进程都有一个自己的地址空间,即进程空间(虚空间)。线程(thread)线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属
2013-04-07 11:12:42
646
原创 指针加减操作,当a为数组时a和&a的区别
求值:int *a[6][3]; int expr=a[5]-a[2]; 输出expr=9.1. 二维数组元素的地址 为了说明问题, 我们定义以下二维数组: int a[3][4]={{0,1,2,3}, {4,5,6,7}, {8,9,10,11}}; a为二维数组名, 此数组有3行4列, 共12个元素。但也可这样来理解, 数组a由三个元
2013-04-03 16:24:08
895
原创 字符数组和字符指针
1.字符数组是由若干个数组元素组成的,每个元素占用一个存储单元,保存一个字符。 例子: char s[50]; 定义了一个字符数组,编译器将会分配50个连续的存储单元。2.字符串指针变量本身是一个变量,用来保存字符串常量(指向的内容可能是常量)的首地址。如果字符串指针变量没 初始化而使用,将产生不可预料的后果。 例子: char *ps; 定义字符串指针变量,编译
2013-03-28 21:03:55
511
原创 Eclipse CDT 中 while(cin>>s) 结束方法
使用Eclipse-cdt做开发的同学可能会遇到这样的问题,需要输入EOF作为结束标志结束输入,但是不知道怎么结束输入。在网上搜了一堆解决方法,都是说windows下使用 Ctrl+Z 做EOF信号,unix和linux下用 Ctrl+D 做EOF信号。自己在Eclipse-cdt中试一下,发现这招行不通。例如调试和运行以下代码,使用 Ctrl+D 也是无法终止输入的。int ma
2012-12-27 21:21:05
1054
原创 解决问题E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) E: 无法锁定管理目录
产生原因: 在用sudo apt-get install 安装软件时,由于速度太慢,想换个软件源,直接关闭了终端,但 apt-get 进程没有结束,结果终端提示:“E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它?”解决办法如下: 终端输入
2012-12-08 22:09:48
1212
转载 C++名字隐藏对公有继承的影响
在讨论名字隐藏对公有继承的影响前,让我们先来看看什么是名字隐藏,以及它在非继承结构中的影响。C++中的名字隐藏(Name Hiding)规则简单地理解就是:当一个具有小作用域(inner scope)的对象A和一个作用域包含A(outer scope)的对象B同名时,在A的作用域中,B将不可见。也就是说B完全被A所屏蔽。double i = 3.1415; names
2012-12-05 16:33:26
297
转载 变量的自动初始化
对于内置变量的自动初始化代码1 1 #include 2 #define CONST 100 3 int *p1; 4 int a[2]; 5 int b; 6 static int c; 7 main() 8 { 9 int d;10 static int e;11 int f[2];12 int *p2;13 pr
2012-12-04 16:38:57
463
转载 派生类转换到基类的可访问性
C++ Prime 理解知识点1.如果是 public 继承,则用户代码和后代类都可以使用派生类到基类的转换。2.如果类是使用 private 或 protected 继承派生的,则用户代码不能将派生类型对象转换为基类对象。3.如果是 private 继承,则从 private 继承类派生的类不能转换为基类。4.如果是 protected 继承,则后续派生类的成员可以转
2012-12-04 15:07:14
415
转载 派生类虚函数调用基类版本
C++ primer 这本书上有这么两句话“派生类虚函数调用基类版本时,必须显式使用作用域操作符。如果派生类函数忽略了这样做,则函数调用会在运行时确定并且将是一个自身调用,从而导致无穷递归。”这句话应该这样理解:当你实现派生类虚函数B : foo时,如果函数体内需要调用基类的虚函数版本时,需要显式使用基类的作用域操作符A::foo(),否则foo()就会在派生类作用域内调用派生类版
2012-12-04 10:27:02
2689
转载 c/c++中extern用来声明全局变量
C/C++中的变量分为全局变量、静态全局变量、局部变量和静态局部变量,在《C/C++中静态局部变量的特点与应用》中我们介绍过静态局部变量,今天我们的目标是全局变量。单个文件中的全局变量 简单一点说,全局变量就是在函数外面定义的变量,下面是一个最简单的实例,一共定义了两个int型的全局变量a和b,这两个全局变量定义的位置不大相同,a定义在函数fun1之前,而b定义在之后,a和b都定
2012-12-03 23:21:23
770
转载 变量和类成员的初始化问题
C++Primer语:初始化分两种:复制初始化(int a = 1;)和直接初始化(int a(1);)1,内置类型变量 在函数体外定义都被初始化成0,在函数体内定义的话不进行初始化。函数体内的局部变量分配在栈里,定义变量只是给了它一个临时的地址,而地址中原来是有数据存在的,只不过对你来说是未知的不确定的。 内置变量的两种初始化几乎没有差别;2,类类型变量
2012-12-02 14:10:13
484
转载 C++复制控制
当定义一个新类型时,通过使用复制构造函数,赋值操作符,析构函数来显示或隐式地完成对象的复制,赋值,撤销 1.复制构造函数:只有单个形参,而且该形参是对本类类型对象的引用(通常是const修饰)的构造函数,称为~ 复制构造函数可用于: 1)根据另一个同类型的对象显示或隐式初始化一个对象. 2)复制一个对象,将它作为实参传给一个函数 3)从函数返回时复制一个对象 4)初始化
2012-11-28 20:02:01
283
转载 关于拷贝构造函数和赋值运算符
什么时候调用拷贝构造函数?什么时候调用赋值运算符? 很多初学者容易搞不清楚。我来总结一下就是: 当进行一个类的实例初始化的时候,也就是构造的时候,调用的是构造函数(如是用其他实例来初始化,则调用拷贝构造函数),非初始化的时候对这个实例进行赋值调用的是赋值运算符。 示例如下: 1 #include iostream> 2 using na
2012-11-28 16:58:25
420
原创 什么时候会用到拷贝构造函数?
一、什么时候会用到拷贝构造函数? 拷贝构造函数 Person(const Person & per) 特点:具有单个形参(常用const修饰,是对本身类类型的引用,因为是要拷贝同类型(相同类)的对象)1当用类的一个对象初始化该类的另一个对象时.例如:C/C++ code?12345
2012-11-28 16:52:21
771
原创 const * 和 * const 代码讲解
#include using namespace std;int main1() { cout << "test" << endl; // 两者相等 const int c1 = 1; int const c2 = 2; cout << "c1:" << c1 << ';' << "c2:" << c2 << endl; // cp1是指向 const 对象的指针,指向地址中的
2012-11-28 15:35:41
409
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人