自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 15 面向对象程序设计

面向对象程序设计的核心思想是数据抽象继承和动态绑定public://// 返回给定数量的销售总额// 派生类负责改写并应用不同的折扣算法//基类都应该定义虚析构函数,即使不做任何事情private:protected:派生类通过使用类派生列表指出该类从哪些基类继承每个基类都可以指定继承权限基类中用virtual不重写:此时调用该函数时,会直接执行基类的版本;重写。

2026-02-16 10:46:40 617

原创 14 重载运算和类型转换

重载的运算符是具有特殊名字的函数,由关键字operator和其后要定义的运算符号共同组成,和普通函数一样也具有返回类型,参数列表,函数体重载运算符函数的参数和参与这种运算符的对象数量一样多对于二元运算符,运算符左侧对象传递给第一个参数,右边侧对象传递给第二个除了函数调用运算符,其他运算符不能有默认实参如果是成员函数,则this指针默认绑定到第一个参数上对于一个运算符,至少得有一个类类型的参数,当同时有内置类型和类类型参与运算,不要改变运算符的语义有两种方式调用运算符某些运算符不应该被重载不要重载逗

2026-02-04 07:08:31 629

原创 13.5 动态内存管理类 13.6对象移动

一些类需要在运行时分配可改变的大小的内存空间,这些类通常使用标准库提供的容器来保存数据(如果可以,应该尽量使用标准库容器)当确实需要自己实现内存管理的时候,这些类也需要自己实现各个拷贝控制成员来进行内存管理。

2026-01-29 14:52:17 114

原创 13.2 拷贝控制和资源管理 13.3 交换操作

首先,类管理类外资源,应当定义析构函数当自定义了析构函数,则应同时定义拷贝赋值和拷贝赋值运算符public:// 先定义析构函数// 当存在自定义析构则定义拷贝及拷贝赋值运算符// 1. 防止自赋值(核心!避免自己赋值给自己时释放内存导致崩溃)// 2. 释放当前对象持有的旧资源delete str;// 3. 深拷贝对方的string内容,创建新的动态对象// 4. 返回自身引用,支持链式赋值(如 a = b = c)行为像指针的类在拷贝时复制指针本身,而不是重新分配内存。

2026-01-26 01:15:02 809

原创 13.1 拷贝赋值与销毁

/阻止拷贝//阻止赋值与default不同 delete必须在编译的时候确保在第一次声明的时候就已经被标记。

2026-01-24 03:53:29 619

原创 12.3 使用标准库 文本查询程序

本文实现了一个文本查询程序,能够统计指定单词在文件中出现的次数及其所在行号和内容。程序提供了两种实现方式:一种是直接使用容器和过程函数实现,通过map和set存储单词及其行号;另一种采用面向对象设计,使用TextQuery和QueryResult类,结合智能指针管理数据。两种实现都能读取文件内容,建立单词-行号映射关系,并支持用户查询单词出现情况,按行号升序输出结果。程序处理了文件打开失败、单词未找到等情况,并提供了格式化输出功能,包括单词出现次数和对应行内容。

2026-01-21 03:18:07 207

原创 12.2 动态数组

文章摘要:本文介绍了动态内存管理中数组分配与释放的两种方法:new/delete表达式和标准库allocator类。new表达式可以分配对象数组,但返回的是首元素指针且丢失长度信息,需使用delete[]释放。allocator类将内存分配与对象构造分离,提供更灵活的内存管理。文章还讨论了智能指针管理动态数组的方法,以及初始化动态数组的不同语法。对于不确定数量的对象数组,建议优先使用标准库容器。

2026-01-11 04:15:54 221

原创 12.1 动态内存和智能指针

12.1 动态内存和智能指针

2026-01-09 04:59:14 980

原创 09 顺序容器

‍通常选择vector是很好的选择,除非你有特别的理由明确需要其他容器容器定义在同名的头文件中命名空间std,使用时包含相应头文件,容器均为模板类顺序容器头文件构造函数接受一个容器大小的参数或者提供容器大小和元素初始化器public:int age;} // 一个静态成员// 每个对象执行的默认构造 name=空字符串,age=0// 每个对象执行该函数,获得执行结果的对象// 同上​​每个适配器都定义两个构造函数。

2026-01-09 02:28:19 1006

原创 10.2 初识泛型算法

标准库提供了许多算法,这些算法拥有一致的结构,不需要全部硬记大部分算法都对一对迭代器指定的范围进行操作。

2026-01-08 05:52:51 279

原创 11.4 无序容器

c++11定义了四个无序关联容器和普通的关联容器不同,不使用比较运算来确定元素位置,而是使用一个哈希函数和关键字类型的==运算符来进行组织在关键字类型本身没有明显的顺序的概念的时候,无序容器可以节省维护元素在存储中的顺序的开销虽然无序容器通常能在大量数据背景下获得更好的平均性能,但是通常在实际使用中需要进行一些性能测试和调优工作。

2026-01-04 03:15:31 276

原创 11.3 关联容器操作

对于set类型key_type 和 value_type 是一样的 set中保存的值就是关键字在一个map中元素是一个键值对,即每个元素都是一个pair对象,包含一个关键字和其关联的值由于不能改变一个元素的关键字,因此这些pair的关键字是const的只有map这一大类的容器才有mappde_type。

2026-01-02 03:14:39 663

原创 11.2 关联容器概述

定义一个map需要指明关键字类型和元素类型而定义一个set只需要指出关键字类型关联容器都提供了一个默认构造,用来创建一个空的关联容器可以用一个关联容器的拷贝初始化另一个关联容器也可以进行值初始化int main()// 默认构造一个空map// 用初始化列表拷贝初始化map// 用map2拷贝初始化map3// 用map2拷贝初始化map4return 0;

2026-01-01 01:31:02 541

原创 10.6 特定容器算法

链表类型 list 和forwaord_list 定义了几个形式的成员函数版本的算法。

2025-12-16 17:29:31 143

原创 10.5 泛型算法结构

任何算法的基本特性都要求其迭代器提供特定操作例如find 只要求通过迭代器访问元素,递增迭代器,以及比较两个迭代器是否相等等这些特性针对这些特性,迭代器可以分为5个类别。

2025-12-16 17:14:29 167

原创 C++Primer 10.4 再探迭代器

除了为每个容器定义的迭代器之外,标准库还在头文件iterator中定义了几个额外的迭代器。

2025-12-16 16:11:39 352

原创 C++Primer 10.3 定制操作

本文介绍了C++算法中自定义操作的方法。主要内容包括:1)使用谓词函数自定义排序规则,演示了按年龄和姓名排序的示例;2)lambda表达式的基本语法和使用场景,包括捕获列表、参数传递和返回类型;3)lambda的捕获方式(值捕获和引用捕获)及可变lambda;4)参数绑定技术,通过bind函数将多参数函数适配为算法所需的单参数形式,使用placeholders实现参数占位。这些技术为算法提供了灵活的定制能力,在保持代码简洁性的同时增强了功能扩展性。

2025-12-15 03:56:29 852

原创 CNN卷积神经网络03--LeNet推理

在训练阶段,我们对图片进行了归一化及标准化操作以及调整维度顺序hwc-->chw,预测的时候,我们需要对待预测的图片进行同样的处理,并且进行升维组成BCHW格式的数组。需要把这个数组解释成人类理解的结果,对数组进行sorftmax函数处理以获取我们对其输出的各类的置信度信息,而最大值的索引即为预测的label。训练完模型保存后,在推理阶段只需要实例化模型,加载参数,然后对图片进行预处理即可获取推理结果,实际上这部分和训练时候进行评估的代码十分类似。根据网络的定义,前向传播返回的结果是[B,10]的数组,

2023-12-02 14:28:35 496 1

原创 CNN卷积神经网络02--LeNet训练CIFAR10

例子中先是把加载的图像转成Tensor,并且调整hwc为chw格式,然后执行一个归一化操作在标准化处理(rgb灰度值/255得到0-1,再减去0.5(均值) 再 除以0.5(标准差)) 对原始数据归一化及标准化有助于网络的训练收敛。网络加载,损失函数反向传播优化器的设置,按batchsize取出数据,进行前向传播,计算损失,反向传播更新网络,评估代码,日志代码,保存网络等。此处的均值及标准差是先验的,是统计的结果,人为设定的,并不是训练网络必须要使用这个参数,重要的是要理解标准化的数据对于训练的帮助。

2023-12-02 01:25:12 1297 1

原创 CNN卷积神经网络01--LeNet网络搭建

Lenet 是一系列网络的合称,包括 Lenet1 - Lenet5,由 Yann LeCun 等人在 1990 年《Handwritten Digit Recognition with a Back-Propagation Network》中提出,是卷积神经网络的 HelloWorld。h_out =(输入尺寸-卷积核尺寸)/卷积步长+1=(32-5)/1+1 = 28。使用16个 5*5的卷积核 输入的通道数为16,H,W的尺寸为。输入的Tensor按BCHW排列为1,3,32,32。

2023-11-30 01:56:21 556 1

原创 C++ 进阶 面向对象编程 001_内存分区模型

代码区是共享的,共享的目的是,对于频繁执行的程序,只需要内存中有一份代码即可。程序内存分区,针对不同类型的数据分配不同的生命周期,提高编程的灵活性。在程序编译后,生成了可执行文件.exe,未执行该程序前,分为两个区域。代码区是只读的,只读是为了防止程序意外的修改了它的指令。堆区的对象的释放 关键字 delete 数据的地址。由编译器自动分配释放,存放函数的参数,局部变量等。由编译器分配及释放,存放函数的参数,局部变量等。存放函数体的二级制代码,由操作系统进行管理。全局区的数据在程序结束后,由操作系统释放。

2023-05-01 12:00:02 107 1

原创 C++基础

c++编程基础

2023-04-28 21:05:38 252 1

空空如也

空空如也

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

TA关注的人

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