C++第一课:C++基础

C++编程基础:入门第一课 C++由Bjarne Stroustrup在1979年在贝尔实验室开始设计与开发,其最初被称为“C with Classes”,继承了C语言的高效性与灵活性,同时加入了面向对象编程(OOP)的概念。到了1983年,这个语言正式更名为C++,意味着对C语言的增强。随着时间的推移,C++经历了多个版本的迭代,每版都加入了新特性和改进。C++标准库的建立,特别是STL(标准模板库)的引入,使其应用范围更加广泛。 阅读详情

C++起源与简介

        C++是一种广泛应用的高级编程语言,其最早被开发出来的目的是能够充分利用C语言的优势,同时克服C语言的一些限制。C++在多个领域中都有着重要地位,特别是在系统编程、游戏开发、嵌入式系统等领域。许多重要的项目,如操作系统、数据库管理系统、图形处理软件等,都是用C++编写的。其高性能、灵活性和可移植性使得它成为众多开发者的首选语言之一。

C++基础内容

iostream

        iostream是C++里标准输入输出流库的头文件,用于实现程序与控制台、文件之间的数据读写,与C语言不同的是,C++的输入和输出是依赖“流(stream)”来实现的。标准输出流是“cout”,标准输入流是“cin”。具体用法是“std::cout << (变量)<< std::endl”,“std::cin >> (变量) >> std::endl”,endl表示换行,类似于C语言的转义字符“\n”。

命名空间(namespace)

        命名空间(namespace)是C++里的一个新概念,用于防止命名冲突的问题。众所周知在C语言里面,由程序员自己定义的变量名和函数名等都不能相同,也不能与C语言内的关键字相同,为了避免这一问题,C++内使用了命名空间。

        命名空间的关键字就是“namespace”,用法就是在namespace后加上一个命名空间的名字,再加上一个花括号“{}”如“namespace bit{}”就相当于开辟了一个名为bit的命名空间。命名空间是一个单独的域。在命名空间内,程序员可以随意定义变量名或函数名,当然前提是同一个命名空间内不能重复,C++标准库就放在一个叫std(standard)的命名空间中,此外命名空间还有以下几个特点:

1.同名的命名空间编译器在编译时会将它们自动合并,这意味着你可以在多个文件中使用同一个命名空间。

2.命名空间可以嵌套,在一个命名空间内还能再创建一个或多个命名空间。

3.命名空间不影响变量的生命周期。

        现在我们已经了解了命名空间的概念,那如果我想要在我的主函数内使用命名空间内的变量或函数怎么办呢?在讲解这个问题之前我们先来了解一下编译器是如何寻找变量的,编译器在寻找变量时,先在函数局部域内寻找,如果没找到就在全局域内寻找。如果想让编译器找到在命名空间内的变量,就需要引入一个新的符号“::”,“::”是域作用限定符,它的责任是告诉编译器去哪个空间寻找要使用的变量,就比如“bit::变量名”,用标准库来举个例子就是“std::cout”表示使用标准库std中的cout函数。

        我们现在了解了如何使用命名空间内的变量,但是还有一个问题:如果一个变量需要大量的使用怎么办?难道每次都要打双冒号吗?这时候就可以使用一个新的关键字“using”,这个关键字的作用是让编译器查找变量时可以直接去命名空间内查找,而不用再使用域作用限定符了,具体用法就是“using namespace std”。这样子我再想使用cout这个函数时就可以直接使用,而不用再写成std::cout了。

缺省参数

        在使用C语言编写代码时,我们常常会遇到这样一个问题,在给某一函数传参时,必须传一个具体的值过去,这样有时候会有点麻烦,比如我可能多次调用都使用的同一参数,我就必须在每次调用时都使用传递一个相同的值。而C++中的缺省参数就解决了这个问题,缺省参数就是给函数中的变量设定一个默认值,在调用时,如果有参数传过来,则使用传过来的参数,若没有则使用这个默认值,这样在一定程度上方便了很多。

        缺省参数在使用和定义的时候有一些规定是必须记住的:

1.缺省参数在声明和定义时只能写一次默认值,如果声明和定义都写了默认值编译器就会报错,这样设计的目的是避免声明时是一个默认值,定义时又是另一个默认值这种情况。

2.缺省参数在定义时必须从又往左依次定义,不能跳着定义,比如(int a, int b = 1, int c = 2)如果定义成(int a = 1,int b, int c = 2)编译器就会报错。

函数重载

        函数重载的意思就是,在C++里面,你是可以编写两个同名函数的。在C语言里,如果我们想定义两个结构几乎一样,只是参数类型不同的函数时,大部分时候只能在后面暴力的加上1、2这样的数字来进行区分。但是在C++里,你可以编写两个同名的函数,只要它们的参数类型不同,比如一个简单的加法函数,你可以写成Add(int a,int b)和Add(double a, double b),这样当你在传参时,编译器就会自动识别你传的参数是什么类型的,然后进入对应的函数,这样一来就变得特别方便了。

        有一个值得注意的问题是,如果只是返回值的类型不同是不构成函数重载的,因为在这种情况下编译器 不知道你具体想调用哪个函数,所以必须是明确意义上的参数类型不同。当然也会有一些特殊情况,比如结合上面的缺省参数,如果两个函数定义为func()和func(int a = 10),在定义时很明显是行得通的,但如果我们在调用是没有传参,直接调用func()时,编译器就会报错,因为它无法判断你想调用的到底是哪个函数,所以遇到这种情况就需要进行特殊的区分。

引用

        引用的定义是给一个变量起一个新的名字,与C语言中的指针差不多,区别在于,引用相当于直接给原变量所在的空间起了一个新的名字,就好比一个人可能同时有大名、小名以及一些外号,不管是用原先的名字还是后来的名字指向的都是同一个东西。引用的具体用法是在类型的后面加上一个&,如int a = 10;int& b = a;b就是对a的引用,改变b就等于改变了a。同时,我们也可以引用新的变量名,如int& c = b;这样写c最终的值也是a。有一个问题需要注意,不能控引用,就是引用时必须初始化,也就是在最开始就必须指定一个对象,如int& b;这种写法就是错误的

        那这时候有人就会有疑问了,为什么平白无故的要给一个变量起一个新的名字呢?接下来我就来讲解一下它具体的使用方法,最常见的就是用来函数传参。众所周知在C语言里,函数的形参只不过是对实参的一份临时拷贝,形参的改变并不影响实参,那这时我们就可以使用引用,这样一来参数在函数内的改变就会直接影响到原本的参数,因为本质上它们都是同一个参数,使用同一个地址,如下图所示:

        那这时候又有了一个新的疑问:那我为什么不直接用指针呢?接下来,我就来讲解一下它和指针之间的区别。首先,指针我们都知道是开辟了一块新的空间来专门存放所指向的地址,在使用时进行解引用读取该地址后进行修改。我们能很明显看出来指针与引用之间的差别,引用不用开辟一块新的空间,它直接代表原先的那一块空间,并且在使用时也不用进行解引用,直接对其进行修改即可。这一对比我们就可以看的出来,引用相比指针还是有不少的优势的,即节省了空间,也提高了效率。但是在C++中,引用与指针的关系是相辅相成的关系,它们俩就像一对兄弟一样,引用并不能直接替代指针,因为C++中的引用有一个致命的问题,它无法修改指向的位置,也就是说,它一旦指定了指向哪一空间,就无法再进行修改了,而这一点指针就可以做到,所以说它们是相辅相成的关系,并不是直接的取代。

        引用有着许多的注意事项:

1.不能返回局部变量的引用,比如int& func(){int x = 0; ruturn x;}这种写法就是错误的,因为x是一个局部变量,函数调用结束时就会被销毁,此时返回去的就会是一个空引用,相当于野指针,所以是不行的.

2.引用只能缩小权限无法放大权限,如果我想引用的变量被const所修饰,在引用时前面也必须加上const,因为使用了const说明该变量编译器只有读的权限没有写的权限,这时如果引用没被const修饰的话,就变成了即可读又可写,权限就被放大了。权限可以被缩小是什么意思呢?就是假如原本的变量是即可读又可写的变量,引用可以被const修饰,就变成只可读,一般在进行函数调用的时候,若不想变量被改变,就可以使用const + 引用类型&这种写法,防止变量被改变。

3.不可以引用常数和临时变量,因为常数和临时变量生命周期都很短,他们都没有独立的地址,很容易变成空引用。但如果我想引用a + b的结果怎么办呢?其实也是有办法的,还是用const,因为虽然(a + b)属于一个临时变量,但是const本身就限制了引用只可以读不可以写,所以就不存在引用悬空的问题了,const int& a = 30;这种情况也是可以实现的。

inline内联函数

        inline也是C++里的一个新关键字,一般将其写在函数类型的前面,代表这个函数是个内联函数,那么内联函数是什么意思呢?内联函数类似于C语言内的宏,或者说,内联函数就是为了替代宏而存在的,大家都知道宏就是在编译时直接进行纯文本替换,且不进行检查,所以宏用起来总是会出现一些问题,写起来也不好写。但是内联函数不一样,它是一个真正的函数,有类型、有作用域,它只是建议编译器进行展开而不是强制展开,这就意味着,如果某个内联函数内的表达式过多,编译器就会不进行展开而是直接跳转到函数内。

宏inline
纯文本替换真正的函数
无类型、语法、作用域检查有类型、语法、作用域检查
容易出错,更危险更安全
简单粗暴,效率高只是建议编译器展开而不是强制

        通过上面的对比可以看得出来,宏的缺点很多,且不安全,写法也更复杂,而内联函数就简单很多,且不容易出错,更安全。当然,我们上面也说过,因为内联函数只是建议编译器展开,所以一旦内联函数过于复杂,编译器往往不会选择展开,所以内联函数一般只在函数内容很短并且会被频繁使用的情况下才会被使用。

nullptr

        nullptr也是C++中的新关键字,它的作用就和NULL一样,代表为一个空指针。那这时候就会引出一个疑问,都已经有NULL了为什么还要设定一个新关键字nullptr呢?因为NULL这个空指针在被编译的时候,会被编译器自动替换为一个整形'0',在C语言内可能没什么问题,但是由于C++内有函数重载的概念,就会导致问题,假设现在我们有两个同名函数,int func (int* p) 和 int func(int a),如果我们在传参时传的是一个NULL,func(NULL),NULL就会被替换成整形0,就会进入后一个函数而不是前一个函数,就与我们本身的目的不符,所以这时候就设计出了nullptr来替换NULL。

        nullptr的功能是,它可以根据需要转化为任何类型的空指针,除了不会转化为整形,不会和重载混淆,这就解决了我们上面所说的问题,这时候我们再调用func(nullptr);就会进入前一个函数了。

总结

        总的来说,学完了C++的第一部分基础内容,我最大的感触就是,C++相比于C语言确实进步了很多,解决了C语言内存在的很多问题,使用起来也会比C语言更加方便,我更加期待C++后面学习的新内容了。

C++编程新手到高手:CS42Cpp课程学习之路 本文还有配套的精品资源,点击获取 简介:"CS42Cpp"课程设计为初学者提供了一个系统的C++学习路径,涵盖了从基础知识到高级概念的全面内容。课程分为两个部分:前4周的基础阶段,后16周的深入阶段,逐渐引导学员掌握C++的语法、面向对象编程、高级特性如模板和STL使用。课程利用"CS42Cpp-master"资源包提供实践材料,帮助学员通过实际编码提高编程技能和解决问题的... 阅读详情

相关推荐

[捷稀 JCG Q30 Pro 刷机说明] 以刷入openwrt24.10为例

摘要: 本文详细介绍了捷稀JCG Q30 Pro路由器刷入OpenWrt 24.10系统的步骤。通过先刷入OpenWrt 23.05过渡固件,再升级Uboot,最后通过TFTP加载工厂镜像完成刷机。关键步骤包括解锁分区、刷写Uboot、进入恢复模式及配置网络。文章还提供了无线设置、Tailscale内网穿透等进阶命令,并附参考文档和固件下载链接。适用于有一定技术基础的玩家,需注意操作风险,严格按流程执行。

贤时间 7132

C++入门小馆:C++基础第一课

嘿,各位技术潮人!好久不见甚是想念。生活就像一场奇妙冒险,而编程就是那把超酷的万能钥匙。此刻,阳光洒在键盘上,灵感在指尖跳跃,让我们抛开一切束缚,给平淡日子加点料,注入满满的passion。准备好和我一起冲进代码的奇幻宇宙了吗?Let's go!相信大家都对c语言有了很多了解,而我们c++祖师爷当初也是对c语言很了解,并觉得c语言有些不足,并且在c语言的基础上创造出了c++这个语言,那让我们一起走进c++的世界吧。

yuanManGan的博客 1306

10xGenomics Loupe Browser实战指南:从数据导入到细胞注释全流程解析

本文提供了10xGenomics Loupe Browser的实战指南,详细解析了从数据导入到细胞注释的全流程。作为一款强大的可视化工具,Loupe Browser能帮助研究者直观探索单细胞测序数据,通过交互式操作进行细胞选择、差异基因分析和细胞类型注释,是单细胞数据分析入门和结果验证的高效平台。

blue42的博客 453

【C++基础】第一课:函数

每个C++程序都包含一个或多个函数(function),其中必须且只能有一个函数命名为main函数。操作系统通过调用main来运行C++程序,一般为C++程序的入口函数。return 0;(⚠️大多数C++语句以分号表示结束!返回类型(函数名(形参列表(函数体(在上述main函数中:int是返回类型;main是函数名;(…)内是形参列表,在本例中,形参列表为空;用花括号{…}包括的语句块为函数体。通常情况下,main函数的返回值被用来指示状态。

qq_34222839的博客 473

电力电子论文(TPE、TTE)投稿经验分享

电力电子顶刊论文投稿经验

橙子的博客 2万+

Yolov5s/Yolov8s网络结构图

yolov8、yolov5网络结构图

Goodness2020的博客 9924

C++第一课:从编译原理到调试技巧,零基础新手避坑指南

编程语言是人与计算机沟通的桥梁,而C++以其严谨的语法和底层控制能力著称。理解编译器如何将源代码翻译为机器指令,是学习C++的第一步。掌握变量、类型、控制流等基础概念,能帮助开发者建立精确的思维模式。在工程实践中,调试器是定位逻辑错误的关键工具,同时处理编译报错的过程也是深化理解的良机。本文从零基础视角出发,分享首次接触C++时的环境配置、常见错误复盘与高效学习方法,为准备入门或初学编程的读者提供可参考的实践路径。

weixin_29299807的博客 207

关于三维全波电磁场仿真软件CST的安装和问题解决

百度网盘链接:https://pan.baidu.com/s/1RgWr8Qau1EzSOlh29SewFQ提取码:fzza这里是2023版本的CST,需要其他版本的uu们可以去官网或者其他人的网盘下载。

weixin_60728441的博客 3602

C++学习第一课:基础概览与第一个程序

C++ 是一种功能强大的编程语言,适用于需要高性能和精细控制的场合。通过本篇文章,你已经对C++有了一个基本的了解,并且能够编写一个简单的C++程序。继续探索C++的深度和广度,你将能够解锁更多的编程技能和知识。希望这篇文章能够帮助你在C++的学习之路上迈出坚实的第一步。如果你有任何问题或需要进一步的帮助,欢迎在优快云技术论坛上提问和讨论。

2401_84585615的博客 642

YOLOv11与3D点云检测融合技术深度解析:从2D检测到三维空间投影的完整实现

2D-3D融合目标检测技术研究 本文系统阐述了基于YOLOv11的2D-3D目标检测融合技术,重点分析了YOLOv11在融合系统中的定位优势及其架构设计。研究表明,2D图像与3D点云数据具有显著的互补特性:2D图像提供丰富语义信息,而3D点云则精确描述几何结构。 关键技术要点: YOLOv11通过GSConv平衡卷积和VoVGSCS特征融合模块,在保持实时性的同时提升了检测精度 系统采用模块化设计,包含坐标投影、点云分割、边界框拟合等核心组件 针对点云数据的非均匀分布特性,提出了多尺度特征增强和距离差异化检

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1126

使用Simulink对固定翼无人机的自动起飞与降落进行仿真

本文介绍了基于Simulink的固定翼无人机自动起飞与降落控制系统设计方法。系统包含飞行器动力学模型、控制系统、环境模拟等模块,通过简化动力学方程描述无人机运动特性。详细说明了从创建模型、设置动力学方程、设计PID控制器(包括自动起飞和降落控制策略)到添加环境模拟的完整仿真流程。重点阐述了升降舵和发动机推力的控制律设计,以及性能评估要点。本方法可有效验证控制系统设计,优化飞行稳定性和安全性参数,为无人机自主控制提供仿真支持。

amy_mhd的博客 223

C++基础教育第一课:从Hello World到变量与输入输出

本节课我们将用C++编写第一个程序,理解计算机执行代码的基本流程,并掌握变量与输入输出的核心概念——这是所有编程语言的基石。实现华氏温度转摄氏温度(公式:C = (F - 32) × 5/9)编写程序计算圆的面积(公式:πr²,π取3.14159)修改Hello World程序,输出你的姓名和学号。编写交互式程序:输入长方形的长和宽,输出周长和面积。可能包含随机内存值(垃圾值),导致计算结果错误。是C++的面向对象风格输出,支持运算符重载。:数据先写入内存缓冲区,满或遇到。:K&R风格(左花括号不换行)

2502_92884473的博客 467

15、虚拟环境中的数据保护与恢复方案解析

本文深入解析了虚拟环境中两种重要的数据保护与恢复解决方案:RecoverPoint for Virtual Machines(RP4VM)在VxRail上的设计,以及Veeam Backup & Replication(VBR)与VxRail的集成方案。文章详细介绍了RP4VM的网络布局、故障转移场景及其相关问题,以及VBR的架构设计、备份与复制流程、许可证选项及其多平台支持特性。此外,还探讨了RP4VM与VBR结合使用的综合解决方案,以及未来数据保护领域的发展趋势,如智能化管理、云原生集成和零信任架构,为

t4y5u6i7o的博客 95

零基础学C++第一课:从环境搭建到写出第一个程序

编程入门的关键不是语言本身的语法,而是建立对程序运行机制最基本的认知。编译器负责把人类可读的源码翻译成机器指令,变量则像贴了标签的储物箱,这些底层概念都是跨语言通用的技术基石。C++作为贴近硬件又支持抽象的系统级语言,在算法竞赛、游戏引擎、嵌入式开发等领域拥有不可替代的地位。理解编译流程、数据类型与变量初始化规则,不仅能减少报错,也能为后续学习其他语言打下坚实基础。本文从开发环境配置出发,结合Hello World的逐行拆解与三个课堂小案例,完整呈现零基础学员的第一课学习路径,并总结了高频报错自查方法与读错

weixin_32075843的博客 245

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

深度学习工具包 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'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 = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```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('DeepLearnToolbox'));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('state',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'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',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 = 'sigm';%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 < 0.10, 'Too big error');```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('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';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)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';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 < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% 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'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 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<0.12, 'Too big error');```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('state',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 < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',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 < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',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 < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % 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 < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % 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 < 0.1, 'Too big error');%% 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('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % 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 < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

C++第一课:从环境配置到核心语法,零基础避坑指南

编程语言是连接人类思维与计算机硬件的桥梁,而C++凭借对内存和性能的极致掌控,成为游戏引擎、数据库、操作系统等高技术含量领域的基石。初学者常因环境搭建和概念抽象被劝退,其实只要理解编译原理并选对工具链,入门门槛就能大幅降低。本文从编译流程讲起,针对VSCode配置C++环境、C++字符串转数组、随机数生成等高频搜索场景,拆解变量、数组、指针等核心语法,同时总结常见的环境坑与学习路径。无论你是纯零基础还是从Python/Java转过来,都能通过本文建立可运行、可调试、可排查的闭环知识体系,为后续STL、算法乃

weixin_30512965的博客 242

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C++入门第一课:零基础环境搭建、Hello World与避坑指南

学习编程不是从语法开始,而是从理解“源代码如何变成可执行程序”这个完整闭环开始。编译器就像翻译官,把人类语言转换为机器指令,而环境变量则决定了系统能否找得到编译器。C++作为一门强类型语言,虽然上手门槛比Python高,却能让初学者清晰地看到变量、内存和程序执行的基本原理。本文从教学视角出发,围绕零基础学员最常遇到的开发环境配置、首行代码运行和编译报错问题,给出VS Code + MinGW的优选方案,并用“盒子”比喻拆解变量类型与输入输出。掌握这些基础,再配合日志式错误复盘,第一课就能为未来的编程之路奠定

weixin_32288959的博客 125

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C++入门第一课

First Part 尝试第一个程序: #include <iostream> using namespace std; int main() { cout << "Hello world!" << endl; return 0; } Second Part T Third Part ...

LLXLQY的博客 509

C++第一课

用途:C语言本身有一些不足的问题,例如:你在全局定义了rand变量,在主函数里面调用 rand函数,编译器会先调用局部函数rand,发现局部域和全局域都有rand,然后编译器就会报错,因为rand被当成变量了,无法调用。C语言中&取地址,C++&这个叫引用,就是取别名,张三可以叫小三,小三可以叫无耻,所以你骂无耻这个人无耻,就相当于再骂小三,归根结底你在骂张三。我们会发现很烦这样 每次都要通过命名空间去调用,所以我们考虑用using给命名空间展开,这种方式在平时,在大项目中就不能这样了。

2301_79263045的博客 310

C++之第一课

编译,这事会弹出一个窗口,让你保存(一定要保啊!啥也没有是因为我们没有写任何输出的语句,为了完成,我们就下节课讲一下输入输出,再见!在我们的生活中,经常有编程的身影,小到手机、智能手表,大到电视等,处处离不开TA。可没有软件,写的再好也是没用,那么我们就下载这个软件,我这就不细讲了,自己搜去。回到正题,我们今天主要学习的是C++语言,C++语言紧凑,使用灵活方便。(图1-2 因电脑或C++版本不同,可能会不一样,不过没什么差距),如果弹出一个黑乎乎的窗口(如图1-2),就代表你成功了!

lmy_t的博客 740

c++基础学习第一课

除法分支:除法运算符的行为取决于操作数的类型,如果两个数都为整数,则C++将执行整数除法,意味着结果的小数将被丢弃,使得结果为一个整数。(1)自动转换:在计算表达式时,C++将bool、char、unsigned char、signed char和short转换为int,这些转换被称为整形提升。char类型是专为存储字符而设计的,char类型是一种整形,能够表示计算机系统中所有的基本符号:字母、数字、标点符号等。前面介绍的四种整形都有一种不能储存赋值的无符号变体,其优点是可以增大变量能够储存的最大值。

2302_79866417的博客 189

Cpp入门基础

定义命名空间,需要使⽤到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中 即为命名空间的成员。命名空间中可以定义变量/函数/类型等。namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量,所以下 ⾯的rand不在冲突了。C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找⼀个变量/函数/ 类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。

2401_86658278的博客 5102

【C++】11 Visual Studio 2019 C++安装matplotlib-cpp绘图

使用C++调用matplotlib-cpp绘图

记录专业模型开发、算法程序设计、软件学习笔记、生活日志。 9392

C++ 在一个cpp文件中使用另一个cpp文件中定义的函数

C++ 在一个cpp文件中 使用另一个cpp文件中定义的函数建立一个console项目头文件cpp文件main.cpp 建立一个console项目 以dev为例,在【文件】【新建】【项目】,新建一个console项目。 头文件 添加新文件,输入说要使用函数的声明,保存为.h文件。 int add(int a,int b); cpp文件 定义在.h中声明的函数,保存为.cpp文件。 #include<iostream> #include"chen.h"//不要忘记这个 int a

m0_43456002的博客 9261

CPP基础学习

CPP基础学习C++ 学习网址C引入C++C++ 重载 引用 友元抽象封装继承多态模板(STL)C++11特性智能指针 C++ 学习网址 CPP 学习 https://www.cplusplus.com/reference/ C++入门教程 面向对象思想 C引入C++ C++struct继承struct C++ 重载 引用 友元 函数重载 抽象 C++ 抽象 封装 C++封装 继承 多态 模板(STL) STL简单例子 Stack_STL C++11特性 智能指针 C++ 智能指针 s

嵌入式与人工智能 1349

c++零基础通关教程第一课 我的第一个程序

本文介绍了C++编程的第一课;Hello World"程序。主要内容包括:工具,第一个程序,原理等知识点详解。通过本堂课,初学者可以理解C++程序的基本结构,掌握编写简单程序的方法,为后续学习变量、数据类型等内容打下基础。文章采用生动形象的比喻和清晰的步骤说明,适合编程零基础的学习

温情亿度网络科技 1386

【C++】入门第一课

一篇搞懂C++入门,详细剖析C++语法

m0_63123468的博客 1829
上一篇: 函数栈帧的创建与销毁
下一篇: C++:一篇文章讲清楚类和对象
虚无的纽扣
博客等级 码龄1年 405粉丝 36原创
评论 14
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值