深度学习——tensorflow2.0使用多GPU实现分布式自定义训练流程 import matplotlib as mplimport matplotlib.pyplot as plt%matplotlib inlineimport numpy as npimport sklearnimport pandas as pdimport osimport sysimport timeimport tensorflow as tffrom tensor...
深度学习——tensorflow2.0搭建文本分类模型 import matplotlib as mplimport matplotlib.pyplot as plt%matplotlib inlineimport numpy as npimport sklearnimport pandas as pdimport osimport sysimport timeimport tensorflow as tffrom tensor...
深度学习——tensorflow2.0使用fine-tune实现CNN中的retnet50模型 import matplotlib as mplimport matplotlib.pyplot as pltimport numpy as npimport osimport pandas as pdimport sklearnimport sysimport tensorflow as tfimport timefrom tensorflow import kerasf...
深度学习——tensorflow2.0搭建分类和回归模型 1.环境安装步骤1:打开anaconda prompt步骤2:conda create -n tf2-gpu-py3 python=3.6.7 anacondaconda activate tf2-gpu-py3步骤3:python -m pip install --upgrade pip步骤4:pip install -i https://pypi.tuna.tsinghua.edu.cn...
梯度下降法局部最优解和鞍点的问题 陷入局部最优并不是神经网络的问题,在一个高维空间中做梯度下降,很难收敛到局部最优,因为局部最小值要求函数在所有维度上都是局部最小值。若一个维度收敛到局部最小值的概率是0.5,则n维度收敛到局部最小值的概率是0.5^n,因此若n足够大,则收敛到局部最小值得概率接近于0。实际情况,在高维平面,函数会落在鞍点上。鞍点是函数在某一维度或多个维度上梯度不为0的点。因此,落在鞍点上的概率为1-0.5^n。...
谈一谈深度学习中的归一化问题 如下图所示,以3个隐藏层的神经网络为例,每层网络只有一个神经元:其中H表示激活函数,这里选择sigmoid函数为激活函数。损失函数为根据梯度下降法和反向传播算法来更新w1、w2、w3、w4:其中H函数表示sigmoid激活函数。若wi的初始化值小于1;当x位于sigmoid函数两侧时,其dH(x)/dx的导数接近于0。因此经过多层的反向传播,导致损失函数J对w1的倒数接...
使用jupyter notebook运行卷积神经网络出现的版本问题 1.在anaconda中安装PIL,若是python2版本则直接安装pil,若是python3版本,则只能安装pillow。2.执行data_dict = np.load(vgg16_npy_path, encoding='latin1').item()出现:Object arrays cannot be loaded when allow_pickle=False原因:使用的nump...
深度学习之梯度下降法和batch_size对训练的影响 梯度下降法的本质是通过求W和b来寻找损失函数的最小值,具体过程是对损失函数求偏导获得其梯度,以单个训练样本为初始点进行梯度下降,直到得到梯度为0,即导数为0的极小值点。但是由于极小值点并不一定是最小值,因此需要使用多个训练样本求出对应的极小值点,选出损失函数最小值对应的W和b值。若选择梯度下降法一次训练的样本大小为batch_size,则batch_size个样本对应的损失值的均值才是梯度下降...
Tensorflow框架 1. 什么是TensorflowTensorflow是Google开源的基于数据流图的科学计算库,适用于机器学习。Tensor的意思是张量,向量是一阶张量,矩阵是二阶张量;flow是流动的意思。因此Tensorflow的意思是张量在图中流动。Tensorflow使用tensor来表示数据;使用图(graph)来表示计算任务;在会话(session)的上下文(context)中执行图。T...
如何将ipynb格式转换为pdf 如何将ipynb转换为pdf(不支持中文):(1)https://miktex.org/download下载安装miktex(2)打开Anaconda Prompt,使用cd命令行中进入jupyter文件的路径下(3)执行jupyter nbconvert --to latex NotebookName.ipynb,将ipynb转换为tex文件(4)执行xelatex Notebo...
pickle模块的使用 在python3中,用于序列化的两个模块:json、pickle。Json提供四个方法,分别是dumps、loads、dump、load;pickle也提供四个方法,即dumps、loads、dump、load。pickle可存储的数据类型:数字、字符串、列表、元组、集合、字典、函数、类。pickle常用方法:(1)pickle.dumps(obj, protocol=None, *,...
机器学习—支撑向量机SVM 10.支撑向量机SVM10.1支撑向量机SVM的实现10.1.1什么是支撑向量机支撑向量机的英文全称是Support Vector Machine,其思想可以解决分类问题,也可以解决回归问题。对于二分类问题,我们需要找到一条直线,将标签为0的样本划分在直线的一侧,标签为1的样本划分在直线的另一侧,这条直线称为“线性分类器”。对于训练数据集,其线性分类器有无数条,如何找到一条泛化性能...
机器学习—逻辑回归Logistic Regression 8.逻辑回归8.1逻辑回归的实现8.1.1什么是逻辑回归逻辑回归又称Logistic Regression,其本质是一种广义的线性回归模型,常用于解决二分类问题。在前面的多元线性回归中,有,其中表示样本的预测值、Xb表示样本的特征集加上第一列的元素1、θ表示截距和特征的系数。在逻辑回归中,有函数,当>=0.5时,=1;当<=0.5时,=0。这也是为什么逻辑回归用...
机器学习—多项式回归 7.多项式回归和模型选择7.1多项式回归7.1.1多项式回归的实现思想在现实生活中,很多数据之间是非线性关系;虽然使用多线性回归来拟合非线性数据集,但是其拟合效果是非常的差。#程序7-1import numpy as npimport matplotlib.pyplot as plt np.random.seed(123456)x = np.random.uni...
机器学习—PCA 6.PCA6.1什么是PCA6.1.1 PCA的实现思想主成分分析法(Principal Componentm Analysis)是一个非监督的机器学习算法,主要用于数据降维、去噪声等,简称PCA。问题1:对于一个二维的特征空间,如何将其降维到一维的特征空间?解决1:在二维特征空间中找到一条直线,将特征空间中所有的样本点映射到这条直线上。问题2:降维过程中,数据会发生丢失,...
机器学习—梯度下降法 5.梯度下降法5.1什么是梯度下降法5.1.1梯度下降法的实现思想最优化方法是寻找函数(目标函数)极值点的数值方法,包括梯度下降法、牛顿法、坐标下降法、拉格朗日乘数法、凸优化等。梯度下降法是一种基于搜索的最优化方法,它不是机器学习算法;其作用是最小化一个损失函数。梯度是导数对多元函数的推广,它是多元函数对各个自变量偏导数形成的向量,常表示为▽f。一元函数y = f(x)的梯...
机器学习—线性回归算法 4.线性回归算法4.1简单线性回归在前面介绍了一种解决分类问题的最基本算法kNN,本章会介绍解决回归问题的最基本算法—线性回归。线性回归算法思想:寻找一条直线,最大程度的拟合样本特征和样本标签之间的关系。当样本只有一个特征时,称为简单线性回归;样本特征大于1时,称为多元线性回归。4.1.1简单线性回归算法的实现假设最佳拟合的直线方程为y = ax + b;对于每个样本x(i),...
机器学习—k近邻算法 3.k近邻算法3.1 kNN算法的实现k近邻算法(k-Nearest Neighbors)也称为kNN算法,它是算法中最简单、最基础的一种。kNN的基本思想:将数据集分为训练数据集和测试数据集,为了测试的准确率,两个数据集互异;计算测试数据集中每一个样本和训练数据集中每一个样本的距离,统计出距离值最小的k个样本(训练数据集),对k个样本中的标签值进行统计,最多的那个标签值为测试样本的预测;...
机器学习—numpy、matplotlib和sklearn 2.3 numpy库numpy是高性能的科学计算库。在numpy中,引入了”ndarray”多维数组的概念,其一维数组表示向量;二维数组表示矩阵,numpy的优势就是包含了矩阵相关的运算。2.3.1 numpy.ndarray基本属性#程序2-3import numpy as np print(np.__version__) a = np.array([0,1,...
机器学习—2.编程环境和Python3库 2.编程环境和Python3库2.1环境搭建Anaconda官网https://www.anaconda.com/下载windows版本的安装包,直接安装即可。需要注意的是安装用户最好选择“Just me”;安装路径只能在C盘的用户下;在“Advanced Installation Options”中不要勾选“Add Anaconda to my PATH environment vari...
Start Machine Learning 1.机器学习基础知识1.1什么是机器学习机器学习是一种让计算机利用数据而不是指令来进行各种工作的方法。传统的编程理念:对于一个需要解决的问题,通常是先制定规则,然后根据规则编写代码,最后让计算机去执行。但是,当问题的规则无法制定,或问题的规则在不断的变化时,使用传统的编程理念是不可行的,于是引入了机器学习。例:让计算机去识别一只猫。难点:由于猫的种类多种多样,因此难以制定规...
Python3网络爬虫 3.Python3网络爬虫3.1爬虫分析爬取目的:爬取虎牙TV下,英雄联盟主播的人气排行。爬取网页:https://www.huya.com/g/lol分析网页:(1)如何实现爬取目的:抓取主播名称和直播间观看人数;(2)查找数据的html:在360浏览器下,按f12查看网页的html信息,点击html中左上角的箭头,在网页中选择主播名称、或观看人数,则会跳转到对应的htm...
Python3第三方库requests 2.Python3第三方库requests2.1安装requests由于requests是第三方库,因此在vs code上需要安装才能使用。PS D:\> cd '.\Program Files (x86)\Python\Python37-32\Scripts\'PS D:\Program Files (x86)\Python\Python37-32\Scripts> ...
Python3内置库urllib的使用 1.Python3内置库urllib1.1 Python3内置库urllib是Python3中使用url的内置库,包含多个模块。(1)urllib.request模块:打开和读取urls。(2)urllib.error模块:包含urllib.request引发的异常。(3)urllib.parse模块:用于分析urls。(4)urllib.robotparser模块:用于分...
Python3快速入门—10.知识扩展 10.Python3扩展10.1异常10.1.1常见异常程序在运行时产生的错误称为异常。在官网https://docs.python.org/3/library/exceptions.html中,对Python3中所有的内置异常进行了详细说明。其具体的层次结构如下:BaseException(所有异常的基类) +-- SystemExit(由sys.exit()引发,表示解...
Python3快速入门—9.函数式编程 9.函数式编程9.1闭包9.1.1函数也是对象在Python3中,没有函数重载。即当函数名相同,参数列表不同时,后面定义的函数会覆盖前面定义的函数。#程序9-1def add(x,y): return x+y def add(x,y,z): return x+y+z print(add(1,2))print(add(1,2,3))运行...
Python3快速入门—8.字符串进阶 8.字符串进阶8.1正则表达式8.1.1正则表达式的基本认识正则表达式是一个特殊的字符序列,帮助我们检索、替换字符串中符合某个模式(规则)的文本。#程序8-1import re s = 'Life is short,You need Python!' print('Python' in s) r = re.findall('Python',s)pri...
Python3快速入门—7.枚举 7.枚举7.1枚举的定义和使用7.1.1枚举的定义在Python3中新增加了一种数据类型—枚举。枚举的定义:(1)导入enum模块;(2)使用class定义枚举,并继承Enum类;(3)定义枚举成员。#程序7-1from enum import Enum class Color(Enum): RED = 0 BLUE = 1 GREEN...
Python3快速入门—6.类(完结) 6.3类的封装性类的3大特性:封装性、继承性、多态性。在类的定义中,变量和方法若在类外可以访问,则表示公有成员;若在类外无法访问,则表示私有成员。当变量和方法的命名格式为__xxx,则表示为私有成员。将类中的变量和部分方法隐藏起来,只给外部提供调用接口,称为类的封装性。#程序6-13class Person(): #this is a test count ...
Python3快速入门—6.类(未完结) 6.类6.1类和对象6.1.1类的定义计算机语言中有2个重要概念:数据、算法。在Python3中,数据可以使用数字、序列、集合、字典来表示;算法可以用函数/方法来实现。为了将数据和算法统一管理,于是引申出了类。Python3中,类中的数据称为变量(注:也有人称为属性),包括类变量和实例变量;类中算法的实现称为方法,包括类方法、实例方法、静态方法和专有方法。类定义格式如下:c...
Python3快速入门—5.函数 5.函数5.1函数的定义在Python中,函数定义的格式如下:def funcname(parameter_list): pass其中,funcname是函数名称,parameter_list是函数的参数列表,pass表示函数体。'''this is run.py'''def print_info(a): print(a) f = 1.234...
Python3快速入门—4.包和模块 4.包和模块4.1包和模块的含义在Python中,项目的组织结构从高到低依次是:包->模块->类->函数/变量。类和函数在后面的章节中讲解,本章主要讲包和模块。Python包:Python项目下,包含__init__.py文件的文件夹,简称”Package”。模块:Python项目下,包含Python代码的.py文件,简称”Module”。Python包可以理...
Python3快速入门-3.2流程控制语句 3.2条件控制语句3.2.1 if语句格式如下:if condition:pass若condition为True,则执行下面的语句pass;pass前必须有4个空格(一般Tab键会占4个空格),其表示是if的代码块。其中pass是Python中的关键字,表示空语句或占位语句。在后面的学习中,由于代码量较大,将使用vs code来编辑代码。例1:''' 模块...
Python3快速入门-3.1运算符 3.运算符和流程控制语句3.1运算符3.1.1算术运算符(1)运算符+:两个操作数相加,适用于数字、字符串、列表、元组。(2)运算符-:两个操作数相减,适用于数字、集合(差集)。(3)运算符*:两个操作数相乘,适用于数字、字符串、列表、元组。(4)运算符/:两个操作数相除,返回浮点数,适用于数字。(5)运算符%:取余,返回两个操作数相除的余数,适用于数字。(6)运算...
Python3快速入门-2数据类型 2.Python3数据类型2.1基础知识2.1.1 Python3注释在Python中,有2种注释方式:单行注释、多行注释。单行注释:使用#作为单行注释符号。>>> print('hello world') #单行注释hello world>>> #print('hello world')>>> 多行注释:使...
Python快速入门—1.简介 1.Python3简介1.1 Python起源Python是目前最流行的编程语言,在TIOBE编程语言排行榜,一直保持前列。Python作者:Guido van Rossum(吉多·范罗苏姆),荷兰人,也被称为“Python 之父”。在2000年,BeOpen PythonLabs团队发布了Python2.0。Python2的最后一个版本是2.7,支持时间据说会延长到2020年...
Linux应用编程—完结 5.Linux应用编程5.1文件I/O编程在Linux编程中,读写文件有2种方法:标准C、Linux API。5.1.1标准C使用stdio.h中的函数:fopen、fclose、fwrite、fread。在windows下编程:#include<stdio.h>#include <stdlib.h> int save(){con...
Linux应用编程—完结 5.Linux应用编程5.1文件I/O编程在Linux编程中,读写文件有2种方法:标准C、Linux API。5.1.1标准C使用stdio.h中的函数:fopen、fclose、fwrite、fread。在windows下编程:#include<stdio.h>#include <stdlib.h> int save(){con...
linux应用编程——静态库和动态库 4.动态库和静态库如果编写了一个很有价值的算法,想让别人使用,但又不想公开代码。该怎么办?在C/C++中,使用库的技术,将编译好的代码提供给他人使用。库分为动态库和静态库,在windows系统下,动态库扩展名为dll,静态库扩展名为lib;在linux系统下,动态库扩展名为so,静态库扩展名为a。4.1动态库4.1.1动态库的生成Linux下动态库的规范命名:libxxx.so...
linux应用编程-Makefile和gdb调试 3.4 Makefile在前面学会使用命令行来编译Linux程序。项目有hello.cpp、other.cpp、other.h文件。方法1:命令行编译g++ hello.cpp other.cpp -o hello方法2:命令行编译链接g++ -c hello.cpp -o hello.og++ -c other.cpp -o other.og++ hello.o o...
Linux应用编程-3.linux编程进阶 3.Linux编程进阶3.1使用vs2017开发Linux vs2017支持跨平台开发,因此使用vs2017开发linux更加方便。由于CentOS 6.6不支持C++11,因此我们需要升级GCC到4.7或以上版本。升级Gcc:1.以root用户登录2.获取安装包并解压wget http://ftp.gnu.org/gnu/gcc/gcc-6.1.0/gcc-6.1.0...
Linux下的第一个程序 2.Linux下的第一个程序2.1 Linux文件系统Windows分区:将一个大容量的物理硬盘,划分几个逻辑的区域来管理,如C、D盘等。在Linux中并没有盘符的概念,它是以树状结构管理所有目录、文件。在之前,安装Linux系统时,需要分区;它实质上是将分区挂接在某个目录上,如根文件系统挂接在根目录”/”上,如将光驱、硬盘挂载在/mnt目录下。Windows路径:C:\Windo...
嵌入式Linux应用编程—嵌入式Linux常识2 1.3平台我们通常所说的平台包括硬件平台和软件平台。处理器和它的外围电路组成在一起,就是所谓的硬件平台。如一个ARM架构处理器和外围电路组成的单板,我们称为ARM平台。一个嵌入式系统是针对某个应用来开发的,因此不可能在搭建的ARM平台上,再去开发针对这个ARM平台的编译软件和工具等。那该怎么办?由于x86和x64平台上的资源丰富,因此可以在x86或x64平台上进行编辑、编译代码,然...
嵌入式Linux应用编程—嵌入式linux常识1 嵌入式系统是针对某个应用,软硬件可裁减的,对体积、功耗、成本等等有严格要求的一个计算机系统。看起来很复杂,其实就2点:1.嵌入式系统是一个计算机系统;2.嵌入式系统是针对某个应用的。我们通常使用的电脑、笔记本,就是一个通用的计算机系统。通用的意思是没有特定的用途、什么都可以干,如上网、打游戏、听歌等。在超时买东西时,常看到收银员使用pos机进行结账收银。pos机有主板、CPU、操作系统,因此是...
HTTP编程—完结 4.4.4客户端和服务器端交互HTTP1.0定义了3种请求方法:GET、POST、HEAD;HTTP1.1新增5种请求方法:PUT、DELETE、CONNECT、OPTIONS、TRACE。GET:请求指定的页面信息,并返回实体主体。POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。...
网络编程—HTTP 4.4 HTTP编程4.4.1 UDP和TCP的区别UDP是一种数据报模式的协议,TCP是一种流模式的协议。UDP的发送端调用了几次sendto,接收端必须用相同次数的recvfrom读取数据。因为UDP是基于报文的,每次只能读取一个报文,报文之间不会合并;若接收缓冲区小于报文长度,则多余部分会被丢弃。TCP的发送端调用发送(send)100字节的数据,但是接收缓冲区只有10字节,...
网络服务器编程——完成端口 4.3.5完成端口模型(IOCP)选择模型是5种模型中效率最低的,而完成端口则是5种模型中效率最高的IO模型。//完成端口TCP服务器#include <iostream>#include <winsock2.h>#include <windows.h>#include <process.h> #pragma comm...
网络服务器编程——重叠IO模型 4.3.4重叠I/O模型异步IO和同步IO的区别:同步IO中,线程启动一个IO操作然后就立即进入等待状态,直到IO操作完成后才醒来继续执行。异步IO中,线程发送一个IO请求到内核,然后继续处理其他的事情,内核完成IO请求后,将会通知线程IO操作完成了。重叠IO属于异步IO。在Windows socket中,接收数据分为2步:等待数据传输;将数据从系统复制到用户空间。第一阶段(等...
网络服务器编程——事件选择模型 4.3.3事件选择模型事件选择模型将每个套接字和每个WSAEVENT对象对应起来,并且在注册的时候指定需要关注的哪些网络事件。缺陷:不能同时处理多个套接字,只能同时处理一个事件对应的套接字;一个线程中处理的套接字有限,一般为64;应用程序中要处理大于64个套接字,必须额外创建线程。//事件选择TCP服务器端#include <iostream>#include &l...
网络服务器编程——异步选择模型 4.3.2异步选择模型异步选择WSAAsyncSelect是Select模型的异步版本。在Select模型中,调用select()函数会发生阻塞;而WSAAsyncSelect模型在调用WSAAsyncSelect()函数时,它会通知系统感兴趣的网络事件,然后立即返回。在前面,我们在windows下创建的都是控制台程序;本小节的代码则是windows应用程序。使用WSAAsyncSelec...
网络编程4-select模型 4.3服务器端IO模型双十一时,淘宝同时在线用户可达上亿。想处理上亿用户的连接请求,必须要求阿里服务器的性能非常高。而以前12306处理过多用户的需求时,经常出现死机的情况,这说明服务器性能不足,在设计时技术有限而导致优化不足。因此,在服务器端编程需要构造高性能的IO模型,windows平台常用的IO模型有5种:选择模型(Select)、异步选择(WSAAsyncSelect)、事件选择(...
网络编程3-TCP/UDP 4.2 Socket编程基础知识:1.在windows/linux下都有一个ping命令,用来检查对方主机是否连通。若请求超时:对方关机或离线;己方没有连网;对方在线,但屏蔽了ping服务。2.查看自己的IP,windows:ipconfig;linux:ifconfig。3.抓包软件:Wireshark。注意:当ip为127.0.0.1时,无法抓包,因为这是回环地址,数据不经过网...
网络编程2 4.1.3 TCP/UDP协议TCP协议(传输控制协议):它是面向连接的协议,即在收发数据之前,服务器端和客户端必须建立可靠的连接,其过程称为“三次握手”。TCP三次握手:1.客户端发送SYN(同步序列号的标志位)数据包给服务器端,向服务器端请求建立连接。2.服务器端收到客户端的请求后,用一个带ACK(确认应答)和SYN的数据包回应客户端,表示服务器端收到客户端请求,允许客户端发送...
网络编程1 4.网络编程4.1网络协议4.1.1网络协议模型网络协议模型有OSI七层协议模型和TCP/IP协议模型。OSI只是一种理论下的模型,而在实际应用中,广泛使用的是TCP/IP协议。数据链路层:又称网络接口层,通常包括操作系统中的设备驱动和计算机中的网卡。网络层:又称网络互联层,在TCP/IP协议族中,包括IP协议、ICMP协议等。传输层:为两台主机上的应用程序提供端到端的...
C++进阶(语法篇)—第11章 设计模式(3) 11.3.4模板模式模板模式:定义一个操作中的算法骨架,将一些步骤延迟到子类中。模板模式使得子类可以不改变一个算法的接口即可重定义该算法的某些特定步骤。模板模式是行为型模式中最简单的一种,在实际应用中会经常使用。注:模板模式和前面的类/函数模板不同。案例:现在公司组2个队伍,一个队伍打羽毛球,一个队伍打篮球,请完成这个程序的设计。#include <iostream>...
C++进阶(语法篇)—第11章 设计模式(2) 11.3行为型模式行为型模式:主要用于管理对象之间的算法、关系和职责。主要讲策略模式、命令模式、观察者模式、模板模式。11.3.1策略模式策略模式:定义一系列算法,将这些算法封装起来,并且使算法之间可以转换。本质是将算法和客户端之间隔离,使得客户端只能通过抽象算法类来访问具体算法。假设手机需要支持3种使用模式,分别是标准模式、驾车模式、飞行模式。现在你是手机的开发者,该如何设计应用...
C++进阶(应用篇)—第2章 进程间的通信(补) 2.3.2匿名管道//匿名管道//father.cpp#include <windows.h>#include <iostream> using namespace std;#define BUF_SIZE 4096 #define CHILD_ADDR L"C:\\Users\\gyrt\\Documents\\Visual Studi...
C++进阶(语法篇)—第11章 设计模式 11.设计模式11.1 GoF和Design Patterns1994年,由4位大牛(GoF)合著出版了《Design Patterns: Elements of Reusable Object-Oriented Software》一书,中文翻译为《设计模式》。该书首次提出了软件开发中设计模式的概念,将设计模式规范化并提升到了理论高度。在书中提及了23种设计模式,这些模式可以分为3类:创建...
C++进阶(语法篇)—第10章 智能指针 10.智能指针10.1 unique_ptr先看下面的代码:#include <iostream> using namespace std;void Smart_pointer(int a);int main(int argc, char ** argv){Smart_pointer(1); return 0;}void Smart_...
C++进阶(语法篇)—第9章 STL(补) 9.3关联容器关联容器中的元素是按关键字来保存和访问的;而顺序容器中的元素是按照它们在容器中的位置来顺序保存和访问的。—<< C++ Primer>>关联容器常用的有map、set、multimap、multiset。9.3.1 map关联容器map是关键字—值的集合,如map<int,string> is_map。对象is_map中存储的元素必...
C++进阶(语法篇)—第9章 STL 9 STL9.1标准模板库三大编程理念:过程化编程、对象化编程和泛型编程。标准模板库STL运用的就是泛型编程的思想,将算法独立于数据类型之外,强调了代码的重用技术。STL是每一个C++程序员必须掌握的技术,其分为3部分:容器、迭代器、算法。容器是存放同类数据的一种数据结构,如数组、队列、链表等。容器可以分为3大类:顺序容器、关联容器、容器适配器。迭代器用来遍历容器中的对象。算法是对...
C++进阶(语法篇)第8章—异常 8.异常8.1程序异常程序在运行阶段遇到错误,而导致程序无法继续正常的执行下去,称为异常。针对异常,处理方法之一是调用abort()函数、exit()函数使程序中止运行。#include <iostream>#include <cstdlib> using namespace std;int max(int a, int b);int mai...
C++进阶(应用篇)——第二章 进程间的通信 2.进程间的通信2.1进程本章讲解windows平台下,进程间的通信方式。进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动,是操作系统动态执行的基本单元。简单的说,进程就是一段程序的执行过程。进程和线程:进程是系统动态执行的基本单位,也是系统分配资源的基本单位;线程是进程中执行的最小单位,它可以访问进程的共享资源。进程之间对共享内存等进行读写操作,需要使用互斥机制...
C++进阶(应用篇)—第一章(完) C++11 多线程编程 1.7 C++11的同步机制除了win API和C++11提供的同步机制,还可以使用轮循机制。轮循机制:创建全局变量g_val;当线程1执行完一段代码后,对g_val赋值;线程2对g_val不断的查询,当g_val等于约定好的某个数值时,开始执行线程2中的代码。使用轮循机制效率较低,因此我们需要学习C++11中的同步机制:条件变量。#include <iostream>...
C++(应用篇) -第一章(补)—C++11多线程开发 1.5 C++11中的多线程编程C++11中增加了线程相关的类,以前进行多线程编程都需要系统的支持,即使用系统提供的API。现在可以使用C++11中的线程类进行多线程编程,不仅简单方便,还使代码的可移植性大大提高。1.5.1简单的多线程#include <iostream> #include <thread>using namespace std; ...
C++进阶(应用篇)——第一章 多线程编程 C++进阶语法篇将和C++进阶应用篇一起编写。引言:本篇主讲C++进阶应用篇,分4部分:多线程编程、进程通信、网络编程、网络服务器编程,操作系统:windows10。1.多线程编程1.1 线程线程是进程的最小单位,是系统调度的基本单位。这句话很难理解,举个例子,打开任务管理器->资源监视器,如下图所示。在图中360se.exe是一个可执行文件,当双击360安全浏览器的...
C++进阶—第7章 类的继承性 7.类继承7.1继承类的3大特性:封装性、继承性、多态性,本小节主要讲继承性。从类A派生出类B(或类B继承类A),类A称为基类,类B称为派生类,7.1.1简单继承//father.h#ifndef _FATHER_H_#define _FATHER_H_#include <iostream>using namespace std; class F...
C++进阶—第六章 类的封装性(补) 6.6析构函数知识点1:构造函数和new在前面的构造函数中,name和curriculum是长度不确定的字符串,而系统在栈中分配的是一块固定大小的内存,若name或curriculum长度过长可能导致内存不够的情况。因此,name和curriculum应该在堆存储区中动态分配内存。//student.h#include <iostream>using namespa...
C++进阶—第六章 类的封装性 6.类的封装性6.1初始类计算机语言中有2个重要概念:数据、算法。过程化编程强调算法,对象化编程强调数据。同类型数据存放在数组中,不同类型数据存放在结构体中,若要把不同类型的数据和对数据的处理算法放在一起,这就引申出了类。在类中不仅可以存放不同类型的数据,还可以存放函数,这样就把数据和算法统一起来管理。类中的数据称为数据成员,类中的函数称为成员函数。类和结构体一样,其结尾需要使用分号来...
C++进阶—第五章 函数 5.函数5.1函数基本知识函数由返回值、函数名、形参列表、函数体构成。由于C++的编程风格,将main()函数放在最前面,因此若main()中对某个函数进行调用,需要在main()前面进行函数声明,而函数的定义则放在main()的后面。int fun_test(int m); //函数声明,又称函数原型int main(void){...fun_test(2);...
C++进阶—第四章 4.运算符和语句4.1运算符1.算术运算符+运算符执行加法运算;-运算符执行减法运算;*运算符执行乘法运算;/运算符执行除法运算;%运算符执行求余运算。2.关系运算符关系运算符有>运算符、>=运算符、<运算符、<=运算符、==运算符、!=运算符,它们比较对象的大小,并返回bool值。如3>2,则返回1表示true。3.赋值运算符=为赋值运算...
C++进阶(补第三章) 3.11函数的形参—指针和引用在前面一直说指针、引用,那么它们对函数有什么影响呢?先看一个形参没有指针和引用的函数://函数1#include<iostream>int add(int a, int b);int main(void){using namespace std;int m = 2, n = 3;int i = add(m, n);...
C++进阶-第三章(未完) 3.数据进阶引言:这一章主要对上一章的内容进行补充以及难点解释。3.1枚举类型的新标准枚举将整型常量和字符串常量联系在一起,类似于关联容器。在C++11的新标准中引入了限定作用域的枚举类型,因此C++包括两种枚举:限定作用域和不限定作用域。在第二章中说的枚举都是不限定作用域的枚举,那么该如何定义限定作用域的枚举类型呢?#include<iostream> #incl...
C++进阶-2 2.数据类型引言:在第二章数据类型中,只对数据类型进行简单介绍,剩下的会在下一章中对其进行补充。2.1基本整型计算机内存的基本单位是位(bit),由0和1组成。若是8位的内存,则可以设置256种组合,可以用来表示数值,其范围是0~255。字节(byte)通常指的是8位的内存单元。1KB = 1024byte,1MB = 1024KB。C++中定义一个字节至少能容纳一个基本字符集中的字符。在美国,基...
C++进阶-1 引言:无论是服务器开发、游戏、操作系统、虚拟现实等多是基于C++开发,而C++作为一门对象化编程语言,学习难度偏高。因此,决定写下这篇《C++进阶》,总结自己对C++的认识和总结。学习书籍推荐:《C++ Primer Plus》、《C++ Primer》1.基础知识1.1 编译程序编辑完成后,还需要进行编译。编译就是将高级程序设计语言编写的源程序,翻译成等价的机器语言(二进制语言)。完成编译的过程...