自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(63)
  • 资源 (1)
  • 收藏
  • 关注

原创 C++(8)/多态

C++的基本特点:抽象封装继承和多态 抽象通过类的定义来实现; 封装实现了访问控制; 继承实现了代码复用; 而多态实现了软件开发的终极目标。框架写好,功能就可以在已有的框架下不断增加。实现80年代写的代码21世纪20年代仍然能够使用。我们先来看一个程序:#include<iostream>using namespace std;class Parent{public: Paren

2017-05-16 16:07:44 371

原创 C++(7)/继承和派生

C++面向对象的基本特点:封装继承和派生 在前面我们已经讲过封装,本节就来讲讲继承以及和继承有关的一些概念。在正式讲解之前,我们先来了解一下,面对对象编程中类与类之间的关系有哪几种。类的关系has 包含关系 包含关系就是一个类的成员是另一个类的对象,用伪码表示如下:class A{};class B{private: A a;};use 使用关系 使用关系就是在一个类的

2017-05-15 16:27:03 740

原创 C++(6)/运算符重载(一)

运算符重载的概念什么是运算符重载? 重载的意思就是添加。使用同一个函数名提供多个接口就是函数重载。运算符重载本质上就是函数重载,其函数名为operator 操作符。调用操作符时,可以使用标准的函数调用,也可以直接当做运算符来使用。实际上, 计算机对整数、单精度数和双精度数的加法操作过程是很不相同的,但由于C++已经对运算符”+”进行了重载,所以就能适用于int,float,double类型的运算。

2017-05-12 17:56:36 530

原创 C++(5)/友元

C++中的友元就像C中的goto。一个破坏了面向对象的封装;一个破坏了面向过程的流程控制。但是,正是这种对面向对象和面向过程的“破坏”给程序带来了灵活性。在C中,如果你有很多出口,需要大量使用return,这个时候就可以使用goto来跳转到指定地点去退出程序,避免了大量的写return语句。在C++中,由于类的封装特性,在类外无法访问类中private成员。如果我们非要访问,就必须在类中定义成员函数

2017-05-07 23:26:59 394

原创 C++(4)/new delete & static & this指针 & 全局函数和成员函数

new & delete 在软件开发过程中,常常需要动态地分配和撤销内存空间,例如对动态链表中结点的插入与删除。在C语言中是利用库函数malloc和free来分配和撤销内存空间的。C++提供了较简便而功能较强的运算符new和delete来取代malloc和free函数。new和delete是运算符,不是函数,因此执行效率高。 虽然为了与C语言兼容,C++仍保留malloc和free函数,但建议用

2017-05-04 21:12:27 931

原创 C++(3)/面对对象初探&构造函数析构函数

在前两节我们介绍了C++对C的扩展,接下来我们就要进入C++中最重要的内容的学习了。面向对象是现代程序设计语言的最大特征之一。面向对象通过抽象封装继承和多态实现了代码的复用和程序的高效开发。

2017-05-04 11:48:43 396

原创 C++(2)/C++对C的扩展--函数部分

C++不仅对C在一些基本语法上进行了扩展,同时对函数的使用也进行的较大的改动。除了第一部分中我们介绍的C++对函数返回类型和参数列表检测的增强,C++函数有更多的新特性,本节就选择了其中一些很重要的内容进行讲解。内联函数概念什么是内联函数 内联函数是在普通函数的基础之上通过关键字inline定义的函数。其在函数调用的时候不需要进栈和出栈,除此之外和普通函数没有任何区别。可以认为内联函数将函数体部

2017-05-02 14:51:48 460

原创 C++(1)/C++对C的扩展&C++ 引用

我们知道C++是C的超集。它向下兼容C语法,同时又在C的基础之上扩展了一些功能。我们一般将C++分为以下三个方面:C++对C的扩展C++面向对象C++ STL本系列博客主要关注于前两个部分C++对C的扩展以及C++面向对象部分。C++ STL有专门的系列讲解。 学习C++有两本书不可不提,一本是C++ primer另一本是C++ primer plus。前者是学习C++ 的终身参考书,后者

2017-04-23 20:22:01 1789

原创 MATLAB 视频与图像转换

本节主要讲解一下如何使用MATLAB实现视频转换成帧图片,以及帧图片如何连接成视频。MATLAB将视频转换成帧图片 我们将该过程分解成一下几个步骤:读取视频,获取视频属性。取得视频的每一帧图片,并分别保存。对以上几个需求MATLAB中都有函数可以满足。读取视频信息,使用VideoReader函数读取每一帧图片使用read函数,保存图片使用imwrite函数%%将视频转换成帧图片clc;c

2017-04-19 16:41:58 7907

原创 C++ STL/ (13) 常用遍历算法

STL中的算法由头文件algorithm functional numeric这3个文件组成。STL算法分为质变算法和非质变算法我们将在剩下的blog中讲述STL中常用的一些算法,包括:遍历,查找,排序,拷贝,替换,算术生成,集合算法等内容。本节主要讲述STL中常用的遍历算法。for_each 我们之前讲述函数对象的时候使用过该函数。这里提出需求如下: 定义一个数据类型为int的数组,定义一个

2017-04-11 15:38:10 411

原创 C++ STL/ (12) 函数对象适配器

我们在前一节介绍了函数对象的概念,本节介绍基于函数对象的一个概念–函数对象适配器。在讲函数对象适配器之前,我们来讲一讲普通函数,函数对象和函数对象适配器的关系。 普通函数是对程序功能的一种封装。这种封装只提供了方法,却没有提供属性。所以当我们希望使用某些属性时,我们往往使用普通函数的升级版–函数对象。我们可以将常用算法和函数对象结合起来使用,这样能完成更复杂的功能。当我们定义了一个函数对象,而这个

2017-04-11 15:08:01 602

原创 C++ STL/ (11) 函数对象

我们在介绍容器set的时候就涉及到了函数对象这个概念,本节就是在原来的基础之上,系统深入的谈一谈STL中的函数对象。函数对象的基本概念函数对象本质上是一个类而不是一个函数函数对象重载了运算符(),从而使对象能够像函数一样的被调用函数对象与普通函数的对比函数对象超出了普通函数的功能,能够保存函数调用状态(如果使用全局变量保存函数调用次数,要给程序加锁,解锁。所以不推荐使用全局变量;而函数对象则能

2017-04-09 16:55:10 1021

原创 C++ STL/ (10) 阶段小结--容器的共性以及使用场景

在前面的blog中,我们介绍了顺序容器(string,vector,deque,list,stack,queue)和关联容器(set,multiset,map,multimap)。本节,我们就来总结一下以上这些容器使用中的异同。顺序容器 容器名称 初始化 赋值 元素存取 大小 插入和删除 扩展 string 默认 带参数 拷贝 运算符重载 = /.assgin

2017-04-09 13:36:19 1276

原创 C++ STL/ (9) STL容器中数据的传递

我们在前面讲了stl中常见的容器:顺序容器(string,vector,deque,stack,queue,list)和关联式容器(set,map)。 本节主要讨论一下,以上各种容器中,数据是如何传递的。数据的传递的方式主要有一下几种:传值:一份数据,进行值传递,会在内存空间上开辟多份存储空间。涉及拷贝操作。传指针:传递的是数据的地址,不涉及拷贝操作。传引用:跟传指针一样。STL中数据是以

2017-04-06 15:41:01 953

原创 C++ STL/ (8) map

map基本概念 什么是map? map是一种关联型容器。map中的元素是按照key-value的方式存储的。也就是说一个map元素包含两个值。且map排序的规则是按key的大小来排序的。map的功能&特点 输入无序,输出按key排序。不能通过iterator去修改map中元素的值,因为这样会破坏排序规则。multimap和map的区别在于:multimap允许出现重复key值。map的

2017-04-04 12:35:39 433

原创 C++ STL/ (7) set

预备知识二叉树 树的任意一个结点都最多只有两个结点。二叉搜索树 树的任意一个结点的值都比该结点的左子树中的任意一个结点的值大;同时比该结点右子树中的任意结点的值小。平衡二叉树(红黑树RB-tree是平衡二叉树的一种) 针对二叉搜索树搜索性能不稳定这个问题。我们跟进一步发明了平衡二叉树。平衡二叉树能保证左右子树的高度差小于等于1。这样在查找特点值时不会出现查找左右两子树的开销相差太大的情况。

2017-04-02 20:18:49 475

原创 C++ STL/ (6) list

list 基本概念什么是list? C++中的list是一个双向链表。我们知道链表由结点相连接组成。结点分为数据域和指针域。双向链表的指针域有两部分,一个指向前驱结点的首地址,一个指向后继结点的首地址。 list 的特点 list 的元素是动态分配的,不会造成内存的浪费list元素插入删除开销小;list元素存储开销大。以空间换时间。list功能 一张图表示: list原理 list

2017-04-02 19:22:24 414

原创 C++ STL/ (5) stack&queue

栈和队列一直是数据结构中的热门话题。STL自然也有对两者的封装。我们在这里谈一些老生常谈的话题。数据结构分为线性结构和非线性结构。线性结构包括受限线性表,一般线性表和广义线性表。受限线性表包括,字符串,栈和队列。广义线性表包括数组和广义表。非线性结构包括集合,树和图。其中树分为一般树和二叉树;图分为有向图和无向图。我们在前面几个blog实现了:字符串,动态数组和双端数组。实际上,我们本节所说的栈就是

2017-03-30 23:22:14 341

原创 C++ STL/ (4) deque

deque是常见的双端数组。用处很广,本节就介绍相关概念并实现一个简单的评委打分系统。deque的基本概念 什么是deque?deque的功能deque的实现方法deque常用APIdeque构造函数deque赋值deque元素存取deque大小deque插入与删除deque应用:评委打分系统deque基本概念 什么是deque? 我们知道vector是一个单口容器,相当于一

2017-03-30 09:57:52 475

原创 C++ STL/ (3) vector

本节我们主要讲一下几个部分:vector容器的基本概念什么是vector容器vector容器的功能vector容器的实现原理 vector容器常用APIvector容器构造函数vector赋值vector元素存取vector大小vector插入删除vector的swap方法及小技巧什么是vector? vector是一个单口容器。vector相当于一个动态的数组,可以向其中添加元

2017-03-29 23:17:48 445

原创 C++ STL/ (2) string

字符串的处理一直是一个热门话题。 在C中,字符串是不存在的。我们用字符数组和字符指针模拟字符串。 在C++ STL中,我们有了真正的字符串。实际上,C++ stl中的字符串是对传统C中的字符串的封装。新瓶装旧酒。 我们接下来讲一下几个部分:string和C风格字符串的互换。string字符串的初始化string字符串的赋值string字符串元素的存取string字符串的操作

2017-03-29 20:38:09 482

原创 C++ STL/ (1) STL概述

STL是C++的一个重要组成部分。我们使用C++的理由,无非3种:C++对C的兼容与扩展C++面向对象C++ STL在本系列blog中,我们就简单的介绍一下STL的用法。什么是STL? STL的全称为standard template library,标准模板库。这个库里面有c++大牛封装的一系列代码。我们学习STL的目的不是分析STL源码然后写出跟STL中一样性能强悍的代码,而是学会使用S

2017-03-29 13:49:01 402

原创 octave/matlab的基本用法

octave是Stanford ML著名公开课指定的软件。 其语法特性和MATLAB几乎一样。Basic operations elementary operation/math operation + - * / ^== ~= && || ~ xor缩进 PS1('>> ')这个缩进是octave独有的。variable 定义变量a=3; %semicolon supressing

2017-03-24 22:57:44 4033

原创 C提高(6)/数组

什么是数组? 数组是具有相同数据类型的元素的一个有序集合。数组代表了一块连续的内存空间。数组的分类 一维数组,二维数组,多维数组 所谓多维数组就是二维和大于二维的数组,在C语言中并不直接支持多维数组,包括二维数 组。多维数组的声明是使用一维数组的嵌套声明实现的。一个一维数组的每个元素又被声明为一 维数组,从而构成二维数组,可以说二维数组是特殊的一维数组。数组的定义 数据类型 数组名[][

2017-03-18 10:16:25 296

原创 C提高(5)/二级指针

基本概念 如果一个指针变量存放的又是另一个指针变量的地址,则称这个指针变量为指向指针的指针变量。也称为“二级指针”。 #define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <string.h>#include <stdlib.h>int main(void){ int a = 10; int *p = &a;

2017-03-15 11:28:49 642

原创 数据结构与算法in C&C++(1)/SWAP

交换是数据结构与算法的基石,本节通过5个方法的实现来谈谈如何实现swap。#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>using namespace std; //C和C++可以混在一起,相互兼容int swap_

2017-03-14 14:25:43 373

原创 C提高(4)/const

通过一个小程序认识C中的const关键字#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>int main(void){ int a=0; const int b=20; //b = 2;具有了只读属性,值不能修改 //a = b;//cons

2017-03-12 19:34:00 227

原创 C提高(3)/字符串

字符串的定义 C语言中没有string数据类型,那么C中如何表示字符串呢? 有两种方法 : 1. 字符数组+转义字符’\0’ 2. 字符指针我们来看一下一下代码://字符初始化字符数组&不指定长度char str1[] = {'a', 'b', 'c', 'd','\0'}; //通过字符数组定义一个字符串,数组长度由初始化数组元素个数决定,该语句等价于char st

2017-03-08 13:05:09 557

原创 C提高(2)/指针

我们在之前的blog中曾经提到过一些指针的知识。指针就是地址,地址就是指针。所以指针的概念和内存的概念是紧密联系的。指针的学习贯穿整个C语言的学习。本节就在原来的基础上再讲讲有关指针的一些知识。指针也有数据类型 如何理解这句话? 我们在上一节知道,数据类型的本质是固定内存块大小的别名,是编译器方便为变量分配内存空间所设置的。指针变量也是一种变量,也占据一定的内存空间。所以说指针也是有数据类型的

2017-03-05 18:08:43 295

原创 C提高(1)/内存四区

我们经常听别人说:C语言是一门偏向于底层(硬件)的语言。偏向于硬件的特点之一就是能够对内存进行直接的操作,今天我们就来讲一讲C语言中的内存是如何分配的。通常情况下C语言中,内存分为栈区,堆区,全局区(静态区,常量区),代码区。 内存区域 Cool 栈区 1.编译器分配和释放 2.容量有限,但速度快 堆区 1.用户手动分配和释放 2.容量大,但分配方式繁琐

2017-03-04 23:29:12 348

原创 C基础(1)/hello world

本节主要介绍4个部分: 1. 第一个命令行hello world程序 2. 第一个MFC hello world程序 3. 第一个QT hello world程序 4. 第一个网页版 hello world程序

2017-03-01 11:28:14 318

原创 Algorithmic Toolbox(1)

Coursera 链接Introduction and Learning OutcomesIn this assignment and the next videos and readings, you will …Implement a program for a given computational problem.Find out that it is slow: on large da

2017-02-27 11:02:05 855

原创 caffe安装教程(2)/caffe安装与编译

在上一节,我们安装好了所有caffe可能用到的软件,我这里再列举一下: - NVIDIA驱动367.57 - CUDA8.0 - Cudnn v5.1 - MKL - MATLAB2014a - Anaconda(Python 2.7版) - OpenCV 2.4.13接下来,我们进入caffe的安装与编译环节。在安装caffe

2017-02-25 19:34:34 10691 1

原创 caffe安装教程(1)/软件安装

因为要做毕设,所以就装了一下caffe。我是用笔记本装的caffe。在安装过程中,我发现了很多问题,参考各类中文网站始终没有解决。现在安装成功了,自然要记录一下安装过程中到底有哪些坑,以免后来人再犯。(笔记本电脑装caffe是个大坑…)先介绍一下硬件设备:电脑是Lenovo Y50处理器是Intel® Core™ i7-4710HQ CPU @ 2.50GHz × 8 i7GTX860m的显卡

2017-02-24 15:53:45 1181

原创 Git(5)/分支管理

Git之所以能够在众多版本控制系统中脱颖而出,第一个原因就是他独特的暂存区stage;第二个原因就是我们今天要讲的分支branch了。什么是分支? 分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN。 如果两个平行宇宙互不干扰,那对现在的你也没啥影响。不过,在某个时间点,两个平行宇宙合并了,结果,你既学会了Git又学会了SVN!

2017-02-18 13:48:21 242

原创 Linux基础(15)/正则表达式

本章是该Linux基础教程的最后一章。正则表达式(regular expression)是一个很重要的概念,这个概念最初是由UNIX中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。,其应用并不局限与Linux。许多程序设计语言都支持利用正则表达式进行字符串操作。比如:我们想用Py

2017-02-17 16:23:25 320

原创 Git(4)/远程仓库

上一节我们详细讲了git本地仓库,这一节我们来讲一讲远程仓库。 本地仓库中的很多功能,在集中式版本控制系统中往往也存在,没有什么新鲜的东西。那是什么让git在众多版本控制系统中脱颖而出呢?其中的一个答案就是:远程仓库。Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上。最早,肯定只有一台机器有一个原始版本库,此后,别的机器可以“克隆”这个原始版本库,而且每台机器的版本库都是一样的

2017-02-17 14:53:03 268

原创 Linux基础(14)/Linux日志系统(pending)

日志数据记录下系统所产生的所有行为,并按照某种规范表达出来。日志数据即可以价值连城也可以一文不值,这其中的关键在于如何分析使用这些数据。 我们可以使用日志系统所记录的信息为系统进行排错,优化系统的性能,或者根据这些信息调整系统的行为。收集你想要的数据,分析出有价值的信息,可以提高系统、产品的安全性,可以帮助开发完善代码,优化产品。日志会成为在事故发生后查明“发生了什么”的一个很好的“取证”信息来源

2017-02-16 13:38:02 417

原创 Linux基础(13)/Linux进程概念&管理(pending)

进程是操作系统中很重要的一个概念。进程的基本概念进程与程序的区别进程的基本属性进程的分类进程的衍生进程组与 Sessions工作管理进程的查看toppspstree进程的管理kill进程的执行顺序

2017-02-16 13:34:30 443

原创 Git(3)/本地仓库

从本节开始,我们就开始讲解Git的核心概念以及用法了。创建版本库=git init什么是版本库 版本库又名仓库,英文名repository。你可以把它简单理解成一个目录,Git能够管理目录下的所有文件,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。示例 把文件添加到版本库=git add/ git commit能添加什么文件?所有的版本控制系

2017-02-16 09:31:13 311

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除