刷野打怪上王者·C++篇·第13期·类&对象

牛客网C++刷题六 下面代码会出现什么问题? char *GetMemory( void ) { char p[] = "hello world"; return p; } void Test( void ) { char *str = NULL; str = GetMemory(); printf( str ); } 参考答案: char p[] = “hello world”; retu... 阅读详情

参考链接

RUNOOB.COM

类

   这个其实在前面讲的时候,就已经涉及过类的使用,现在使用文字描述一下。C语言是面向过程的编程,C++是面向对象的过程。类说白了就是用户定义的类型,类中的数据和方法(可以理解为一个个函数)称为类的成员。下面说一下类的使用,类的定义是以class关键字开头,主体是花括号的内容,下面来说明一下:
 

class 类型
{
    public:                //public是类成员的属性,即在成员中的作用域,公有成员:类的外部可以访问
           数据类型 变量名1;
           数据类型 变量名2;
    private:              //private是类成员的属性,私有成员:类的外部是不可访问的,甚至是不可查看的。只有类和友元函数可以访问私有成员。
           数据类型 变量名3;
    protected:            //几乎与private属性相似,但是它在保护成员派生的类可以访问
           数据类型 变量名4;
};

通过程序来实例说明:

#include <iostream>
using namespace std;

class Project {
public:
	Project();  //构造函数:在对象创建的时候调用,不返回类型,主要对类中成员变量初始化
	~Project(); //析构函数:在删除对象的时候调用,主要用于释放资源
	int getProjectName() const;    //方法
	int getProjectTimes() const;   //方法

private:
	mutable int iTimes;
	int iName;
};
Project::Project()
{
	iTimes = 0;
}
Project::~Project() {}
int Project::getProjectName() const
{
	cout << "天眼工作室" << endl;
	iTimes++;
	return 1;
}
int Project::getProjectTimes() const
{
	return iTimes;
}
int main()
{
	Project *project = new Project();  //创建对象
	for (int i = 0; i < 5; i++) 
	{
		project->getProjectName();
	}
	cout << "调用" << project->getProjectTimes() << "次" << endl;
	delete project;

	getchar();
	return 0;
}

运行结果

天眼工作室
天眼工作室
天眼工作室
天眼工作室
天眼工作室
调用5次

构造函数拷贝

    构造函数拷贝可以理解为使用之前构造的同类对象初始化新创建的对象,因为类内部类成员变量很多,不能简单想普通数据类型赋值(int iVar = 10;)。因此,针对这个问题C++创建了构造函数拷贝。常见的构造函数形式:

类名 (const 类名 &obj)
{
    /*函数主体*/
}

主要有三种使用方式:另一个同类型的对象来初始化新创建的对象、复制对象把它作为参数传递给函数、复制对象并从函数返回这个对象。

实例分析:

#include <iostream>

using namespace std;

class CompareCubeClass
{
public:
	CompareCubeClass(int iTmpL, int iTmpW);
	~CompareCubeClass();
	CompareCubeClass(const CompareCubeClass &obj);
	int getCubeLengthInfo();
private:
	int *length;
	int *width;
};

CompareCubeClass::CompareCubeClass(int iTmpL, int iTmpW)
{
	length = new int;
	width = new int;

	*length = iTmpL;
	*width = iTmpW;
	cout << "构造函数:*length = " << *length << " *width = " << *width << endl;
}
CompareCubeClass::CompareCubeClass(const CompareCubeClass &obj)
{
	length = new int;
	width = new int;

	*length = *obj.length;
	*width = *obj.width;
	cout << "拷贝构造函数" ;
	cout << ":*length = " << *length << " *width = " << *width << endl;
}
int CompareCubeClass::getCubeLengthInfo()
{
	return *length;
}
CompareCubeClass::~CompareCubeClass()
{
}

void display(CompareCubeClass obj)
{
	cout << "Length 大小 : " << obj.getCubeLengthInfo() << endl;
}
int main()
{
	//方式一:对象引用初始化另一个对象
	CompareCubeClass cube1(10, 5);   
	display(cube1);
	//方式二:已有同类对象对新对象赋值
	CompareCubeClass cube2 = cube1;   //
	getchar();
}

运行结果

构造函数:*length = 10 *width = 5
拷贝构造函数:*length = 10 *width = 5
Length 大小 : 10
拷贝构造函数:*length = 10 *width = 5

注:如果类中没有声明构造函数拷贝,则编译器会自行定义。如果类带有指针变量,并有动态内存分配,则它必须有一个拷贝构造函数。

友元函数

    这里其实就是引入一个关键字friend,声明后的函数和类可以访问类中的private和protect变量。下面我们来实例看一下friend使用方法:

友元函数

class 类名
{
    public:
        数据类型 变量名;   
        friend 返回类型 函数名(形式参数);
    private:
        数据类型 变量名;
}

友元类

friend class 类名;

实例代码:


#include <iostream>

using namespace std;
//OwnBusiness类
class  OwnBusiness
{
public:
	OwnBusiness(char* cName);
	~OwnBusiness();
	friend char* getCompanyName(OwnBusiness company1); //getCompanyName函数时OwnBusiness的友元函数
	void printDate(OwnBusiness company1);
	friend class Project;                     //Project类是OwnBusiness的友元类
private:
	char* companyName;
	int createDate;
};


OwnBusiness::OwnBusiness(char* cName)
{
	companyName = cName;
}

void OwnBusiness::printDate(OwnBusiness company1)
{
	cout << "创建日期:" << company1.createDate << endl;
}

OwnBusiness::~OwnBusiness(){}

char* getCompanyName(OwnBusiness company1)
{
	return company1.companyName;
}


//Project类
class Project
{
public:
	Project();
	~Project();

	void projectPrint(OwnBusiness &tmpBusiness, int iDate)
	{
		tmpBusiness.createDate = iDate;
	}
private:

};

Project::Project(){}

Project::~Project(){}

int main()
{
	OwnBusiness *company1 = new OwnBusiness("天眼工作室");
	Project *project1 = new Project();

	project1->projectPrint(*company1, 2020);

	cout << getCompanyName(*company1) << endl;

	company1->printDate(*company1);
	getchar();
}

运行结果

天眼工作室
创建日期:2020

注:尽量不要使用友元函数,因为该功能破坏了类之间相互独立的功能。

内联函数

    在书写程序中,总会有一些函数会调用比较频繁,即不断的有函数入栈,即函数栈,会造成栈空间或栈内存的大量消耗。因此,针对这个问题C语言创建了inline关键字。这里说明一下,在C++中类的内部默认都是内联函数,但是都只限制一行语句,如果函数体超过一行语句,即使有关键字限制也不会认为是内联函数。下面程序举例:

#include <iostream>

using namespace std;

inline int CompareDataMax(int iTmpVar1, int iTmpVar2) //内联函数
{
	return iTmpVar1 > iTmpVar2 ? iTmpVar1 : iTmpVar2;
}
int main()
{
	cout << "10与5中的最大值为:" << CompareDataMax(10, 5) << endl;
	getchar();
}

运行结果

10与5中的最大值为:10

this指针

    这是每个对象访问自己的地址,则通过this指针实现。因为友元函数不是类,所以没有this用法。

#include <iostream>

using namespace std;

class CompareCubeClass
{
public:
	CompareCubeClass(int iTmpL, int iTmpW);
	~CompareCubeClass();
	char* maxLength(CompareCubeClass tmpCube);
private:
	int length;
	int width;
};

CompareCubeClass::CompareCubeClass(int iTmpL, int iTmpW)
{
	length = iTmpL;
	width = iTmpW;
}
char* CompareCubeClass::maxLength(CompareCubeClass tmpCube)
{
	return this->length > tmpCube.length ? "cube1" : "cube2";
}
CompareCubeClass::~CompareCubeClass()
{
}
int main()
{
	CompareCubeClass cube1(10, 5); //矩形1 长为10,宽为5
	CompareCubeClass cube2(1, 5);  //矩形2 长为1,宽为5

	cout << "长度最大的矩形为:" << cube1.maxLength(cube2) << endl;
	getchar();
}

运行结果

长度最大的矩形为:cube1

类中静态变量

    如果函数中声明为静态,就可以把函数和类任何特定的对象独立起来。并且静态变量不能使用this指针进行访问,它的访问方式为类名加::变量进行访问。


#include <iostream>

using namespace std;

class CompareCubeClass
{
public:
	static int iCubeTimes;    //静态成员
	CompareCubeClass(int iTmpL, int iTmpW);
	~CompareCubeClass();
	char* maxLength(CompareCubeClass tmpCube);
private:
	int length;
	int width;
};

CompareCubeClass::CompareCubeClass(int iTmpL, int iTmpW)
{
	length = iTmpL;
	width = iTmpW;
	iCubeTimes++;
}
char* CompareCubeClass::maxLength(CompareCubeClass tmpCube)
{
	return this->length > tmpCube.length ? "cube1" : "cube2";
}
CompareCubeClass::~CompareCubeClass()
{
}

int CompareCubeClass::iCubeTimes = 0;  //初始化静态变量
int main()
{
	CompareCubeClass cube1(10, 5); //矩形1 长为10,宽为5
	CompareCubeClass cube2(1, 5);  //矩形2 长为1,宽为5

	cout << "长度最大的矩形为:" << cube1.maxLength(cube2) << endl;
	cout << "矩形数量: " << CompareCubeClass::iCubeTimes << endl;
	getchar();
}

运行结果

长度最大的矩形为:cube1
矩形数量: 2

对象

    对象是根据类来声明,其实就像变量声明。

类名 变量名;  //方式一
类名 *变量名 = new 类名(形式参数);  //方式二

注:上面程序都已经进行了举例,这里就不在矩实例。

 

更多《计算机视觉与图形学》知识,可关注下方公众号:

 

C++ 打怪游戏 小镇5.3.0--怪物狂欢季 小镇的防线快要撑不住了!! 敌方似乎将一种新型药剂注射进了了部分怪!! 你也显得有点力不从心了... 怎么办?!?!?! 你将目光看向了工作中的工匠 阅读详情

相关推荐

C++ 打怪游戏 原创 小镇5.0--怪物狂欢季(先导)

小镇5.0先导版 修复4.0的BUG 内容变化不大 平衡游戏内容 优化游戏体验

chg__262523的博客 679

第十一天(对象和类)

应该有一个星期没写了吧,原因之一是被数据结构实验,需要编程,费时多。以后多抽时间写吧。希望编辑完并发表没有过12点。 2011-10-29(Objects and Classes) 1、类的定义格式一般如下:class Student { private: char name[20]; void addNum(); public: void setN

The Fallen Angel 687

简单的C++面向对象打怪小游戏

Battle.h #pragma once //防止头文件重复 class Battle { public: Battle(); ~Battle(); void Battle_Armsstore();//武器店 void Battle_Drugstore();//药品店 void Battle_SmallMonster();//小怪 void Ba...

z_tt123456789的博客 3669

C++ 函数中返回字符串的一个陷阱

1 #include&lt;iostream&gt; 2 using namespace std; 3 char * getname(void); 4 int main() 5 { 6 char * name; 7 name = getname(); 8 cout &lt;&lt; "My name is : " &lt;&lt;...

weixin_30924239的博客 601

(MATLAB)一维信号峰值检测findpeaks

一维信号波峰波谷检测,峰值、峰宽、到达时间计算。MATLAB自带的findpeaks函数能完成这一任务,在这里分享其基本用法与特殊用法。

HPC_ZY 2万+

电源完整性之Cadence Sigrity Power DC_IR_Drop仿真

之前和大家分享过电源完整性之仿真设计原理链接: link.今天接着上一篇文章总结一下电源直流压降的的仿真操作流程及一些simulation中的设置参数,用到的时候Cadence Sigrity 中的Power DC组件,下面开始享受仿真的快乐吧: 1.仿真模式选择与文件导入 选择Cadence Sigrity下的Power DC组件,然后先择licence,最后就可以打开我们之前转化好的.SPD文件。操作如下图: 2.设置层叠信息和过孔焊盘参数 层叠信息:每层的介质厚度、材料、介电常数、介质损耗角等,如

刘小同学的博客 1万+

深入理解C/C++混合编程

本次实验是C++和C语言混合编程,但是

u011175448的专栏 813

2.4G跳频算法 2.4G切信道算法 (简例示意nRF52832)

2.4G跳频算法 nRF52832示例 2.4G自适应信道算法

Peter.Min 958

刷野打怪上王者·C++篇·第27期·总结

刷野打怪上王者·C++篇·第26期·时间函数&amp;预处理 刷野打怪上王者·C++篇·第25期·动态内存处理 刷野打怪上王者·C++篇·第24期·信号处理 刷野打怪上王者·C++篇·第23期·标准流输入输出 刷野打怪上王者·C++篇·第22期·多线程处理 刷野打怪上王者·C++篇·第21期·模板处理 刷野打怪上王者·C++篇·第20期·命名空间 刷野打怪上王者·C++篇·第19期·...

CSS360的博客 1617

电流互感器的使用分析

有关电流互感器使用的注意事项,回头再看,耳目一新。

qq_46757048的博客 2万+

vivo X200 Ultra前瞻系列(1):重塑影像旗舰标准

在色彩风格化、视频专业度上实现了安卓阵营的突破性进步。其2亿像素长焦、双LYT-818传感器及5轴防抖技术,对追求个性化创作的用户具有强吸引力。若真机表现能兑现硬件承诺,X200 Ultra有望重新定义手机影像的“专业”标准。然而,其厚重设计、价格门槛及生态适配问题,仍需市场检验。vivo X200 Ultra作为2025年上半年影像旗舰,以“全焦段夜视仪+电影级视频”为核心卖点,主打。,对标小米15 Ultra、OPPO Find X8 Ultra等竞品。,顶配版(24GB+2TB)逼近万元。

专注:太空算力、AI infra、异构调度、大模型成本工程 966

刷野打怪上王者·C++篇·第10期·数组、结构体

参考链接 RUNOOB.COM 数组 数组是存储一个固定大小的相同元素的顺序集合,它们在内存中中对应的地址是连续的。下面我们来看一下数组声明: 数据类型 数组变量名[数组大小] //这是简单的一维数组 下面我们通过程序来看一下: #include &lt;iostream&gt; using namespace std; int main() { int iA...

CSS360的博客 266

符合DO-178C和DO-331的机载软件研制体系

DO-178C的核心要求软件开发生命周期:DO-178C定义了软件开发的生命周期过程,包括需求获取、设计、实现、验证和确认等。它为机载软件开发提供了一套系统化的指导,确保在开发过程中考虑安全性和可靠性。安全等级(DAL):根据系统的重要性,DO-178C将软件划分为不同的开发保障等级(DAL A到E),DAL A的要求最为严格,适用于关键安全功能,而DAL E的要求较低,适用于非关键功能。DO-178C在非基于模型软件开发中的应用。

qq_41854911的博客 980

C++ 控制台 升级打怪小游戏

小游戏介绍:输入“勇士”生日,判断“勇士”星座,给出“勇士”的初始化属性(体力、智力和敏捷)。菜单栏有2个功能"查看状态”和“任务选择”。“查看状态”可以显示“勇士”的基本属性。“任务选择”可以选择“勇士”要做的任务,提升属性。 部分代码:(需要完整代码可在评论下发邮箱) int main() { //1.取名 /*boss名字*/ string value_boss_name; ...

酷小川的博客 8809

Win7没有usb驱动怎么办?Win7没有usb驱动的解决方法

之后发现USB驱动不能够使用,那么碰到这种问题应该怎么办呢?下面就和小编一起来看看有什么解决方法吧。1、我们先使用驱动管理软件进行扫描安装驱动,如果安装后,还不行的话,我们就要进入到控制面板。我们经常会因为各种原因来更新电脑的系统,不过有一些小伙伴在重装完。4、点击usb选项后,找到显示感叹号和问号的usb驱动。2、在控制面板中,点击硬件声音,选择设备管理器。3、进入到设备管理器的页面,找到USB控制选项。6、如果计算机已经联网,我们可以在线更新驱动。5、然后鼠标右键点击更新驱动。

2401_88800025的博客 963

“快速掌握Vivado FPGA开发流程“——详解Vivado开发流程及实例

快速掌握Vivado FPGA开发流程”——详解Vivado开发流程及实例FPGA技术在现代电子领域中应用越来越广泛,而Vivado作为业界最流行的FPGA设计工具之一,也受到越来越多人的关注和使用。那么如何快速掌握Vivado FPGA开发流程呢?本文将详细介绍Vivado开发流程,并通过实例来加深您的理解。首先,我们需要了解Vivado开发流程的主要步骤:创建工程、设计电路、约束电路、生成比特流。接下来,让我们一步步了解这些步骤。

2301_78484069的博客 733

刷野打怪上王者·C++篇·第7期·数据存储

参考链接 RUNOOB.COM 数据存储类说明 在编程过程需要限制和扩大函数以及变量的作用域(关于作用域上一篇已经提到点),需要一些特定的类来进行修饰。为实现上面的功能,C++定义了存储类。C++程序中使用的存储类:auto,register,static,extern,mutable,thread_local。 但是随着C++版本的更新,从C++17开始,aut...

CSS360的博客 842

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain&#39;s apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = &quot;R. B. Palm&quot;, title = &quot;Prediction as a candidate for learning deep hierarchical models of data&quot;, year = &quot;2012&quot;,}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath(&#39;DeepLearnToolbox&#39;));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand(&#39;state&#39;,0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = &#39;sigm&#39;;%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er &lt; 0.10, &#39;Too big error&#39;);```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er &lt; 0.16, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er&lt;0.12, &#39;Too big error&#39;);```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er &lt; 0.08, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er &lt; 0.1, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er &lt; 0.1, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er &lt; 0.1, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er &lt; 0.1, &#39;Too big error&#39;);%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er &lt; 0.1, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free &quot;Bitdeli Badge&quot;)

刷野打怪上王者·C++篇·第23期·标准流输入输出

参考链接 RUNOOB.COM 标准流输入输出 输入流:字节流从设备(键盘、磁盘驱动器、网络连接)流向内存。输出流:从内存流向设备(显示屏、打印机、磁盘驱动器)。这里主要说明&lt;iostream&gt;中的cin(标准输入流)、cout(标准输出流)、cerr(非缓冲标准错误流)、clog(缓冲标准错误流)对象。 实例程序 #include &lt;iostream&gt;...

CSS360的博客 406

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

刷野打怪上王者·C++篇·第1期·简介

参考链接 RUNOOB.COM 好记性不如烂笔头 历史 要看历史我认为还是要去百度百科看比较详细(链接),但要简单来说的话,1979年Bjame Sgoustrup在Bell实验室设计开发的,在1983年更名为C++。其中对C++发展很重要的一件事,就是Alexander stepanov创建了标准模板库(Standard Template Library,STL),并加入到C+...

CSS360的博客 384

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的&ldquo;数理统计&rdquo;课程中有一章专门讲授&ldquo;贝叶斯方法和统计决策理论&rdquo;,近十年来也给中国科学技术大学概率统计专业研究生开设过几次&ldquo;贝叶斯分析&rdquo;课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了&ldquo;贝叶斯统计推断&rdquo;和&ldquo;贝叶斯统计决策&rdquo;的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标&ldquo;*&rdquo;号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

刷野打怪上王者·C++篇·第15期·重载操作

参考链接 RUNOOB.COM 重载操作 重载操作分为重载运算和重载函数。 重载函数 在同一个作用域内,可以声明几个功能类似的同名函数,但是这些形式参数(参数个数、数据类型或者顺序)不同。不能通过返回类型来重载函数。 #include &lt;iostream&gt; using namespace std; class dataDisposeClass { pu...

CSS360的博客 376

刷野打怪上王者·C++篇·第22期·多线程处理

参考链接 RUNOOB.COM 多线程处理 在电脑中可以进行多任务处理,其中多任务的处理方式分为两种:多进程和多线程。多进程是程序的并发执行;多线程是同一程序判断并发执行。 实例程序 #include &lt;iostream&gt; #include &lt;utility&gt; #include &lt;thread&gt; #include &lt;chrono&gt;...

CSS360的博客 364

刷野打怪上王者·C++篇·第6期·变量&常量

参考链接 RUNOOB.COM 变量 其实变量就是一个名字,代指的可操作存储区的名称。也不是随便起个名字就可以,在C++中变量的名称由字母、数字和下划线组成。但必须以字母或下划线开头,并且区分字母的大小写。 估计大家对上一节讨论的字符数不是很清楚,一个字符对应8位(每位对应的就是0或者1)。我们拿一个特殊的类型来进行说明,float类型1位符号、8位指数、23位小数,下面拿...

CSS360的博客 359

刷野打怪上王者·C++篇·第2期·环境配置

参考链接 百度百科 C++环境设置MAC安装XCode、Command Line Tools 好记性不如烂笔头 C++开发环境 还是先说一个什么是集成开发环境(IDE):集成开发环境(IDE),功能齐全,调试功能很强,程序编好后,可以立刻在环境中调试以获得初步测试结果,然后,可以方便地做成beta版形式,拿到实际环境中进一步测试,最后做成软件发行版。 知道了概念就...

CSS360的博客 354

刷野打怪上王者·C++篇·第3期·HelloWorld

参考链接 RUNOOB.COM 好记性不如烂笔头 示例代码 我们还是先上HelloWorld代码,然后在慢慢细聊一下: #include &lt;iostream&gt; using namespace std; int main() { cout &lt;&lt; "Hello, world!" &lt;&lt; endl; return 0; } 结果:...

CSS360的博客 336

刷野打怪上王者·C++篇·第25期·动态内存处理

参考链接 RUNOOB.COM 动态内存处理 为什么会有这么一个概念呢?我们在写程序的时候,有的时候很难提前预知定义的变量需要申请多少内存,只有在程序运行的过程才能够确定。需要说明一点,在C++中内存由两部分组成:栈和堆。其中,函数内声明的所有变量使用栈来存储;对于程序未使用的可用于动态分配的内存则有堆完成。 要进行动态申请内存,C++提供了空间分配new运算符,还提供了...

CSS360的博客 330
上一篇: 刷野打怪上王者·C++篇·第12期·函数&基本数学函数
下一篇: 菜鸟玩算法·数据结构与算法·第1期·复杂度基本概念
元宇宙MetaAI
博客等级 码龄10年 331粉丝 333原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值