期末知识总结

               期末知识总结
以下是这学期所学知识的总结:
        这学期重点学习了类的设计,先说一下类之前的知识点。
        常量表达式和constexpr:常量表达式是指不会改变编译过程中就能计算出结果的表达式,声明为constexpr的对象一定是个常量,且必须用常量表达式初始化,如果认定某个对象是常量表达式,就把它声明为constexpr类型。
        auto类型说明符和decltype类型指示符:用auto声明变量的类型,由编译器自动去分析表达式的类型,推断出变量的实际类型,auto声明的变量必须被初始化;decltype的作用是选择并返回操作数的类型。编译器会分析表达式的类型,并不真正计算表达式的值。             
        范围for语句:语法格式为  for(declaration:expression)  statement;  
expression必须是一个序列,例如用花括号括起来的初始列表,数组,容器等类型的对象,declaration定义一个变量,序列中的每个元素都需要能转换为该变量的类型,statement是语句块,范围for语句不能改变序列的大小,不能加入元素或删除元素。       
        指针和引用,new,delete:指针持有一个对象的地址,格式为  类型 *指针变量,通过指针可以间接操纵它指向的对象,&为取地址运算符,*为解引用运算符,定义指针时指定的类型实际上是指针指向的对象的类型,指针不能保存非地址值,也不能被赋值或初始化为不同类型的地址值,指针可以进行加减整数值的算数运算,void指针可以持有任何类型的地址值,只能表明相关的值是个地址;new运算符在堆上动态分配空间,创建对象,并返回对象的地址,new的三种形式为   new 类型(初始值),new  类型[数组大小],new  (指针)类型;delete运算符用于释放使用之后的堆上的空间,格式为  delete 指针; ,执行delete运算后,指针指向的空间被释放,不能再使用指针指向的内存;引用格式为  类型  &引用变量 = 初始值; ,引用必须被初始化,然后和它的初始化对象绑定在一起,对引用的所有操作都会被应用到它所绑定的对象上,引用分为左值引用和右值引用,右值引用目的是支持移动操作,格式为   类型  &&右值引用变量 = 右值表达式; ,变量是左值。                const限定指针和引用:不能将const地址赋值给非const指针,允许将一个非const地址赋值给const指针,const跟着谁就限定谁。  const引用可以绑定到非const对象,也可以用任意表达式初始化const引用,只要表达式的结果能转换为引用的类型。  当一个对象的值可能在编译器的控制或检测之外被改变时,应该将对象声明为volatile,例如一个被系统时钟更新的对象,volatile的语法和const相同。
        结构体,联合,枚举:结构体能把一组不同类型的数据组合在一起,构成一个复合类型,其中每个数据都是结构体的成员。格式为    struct  结构体类型名{  成员声明;  };     结构体可以得到需要的类型,很方便;    使用一个变量来处理不同的数据类型时可以用联合,用关键字union定义,语法和struct相似,union的每次只能使用一个成员;  枚举类型定义了一组命名的整型常量,可以提高代码的可读性,用关键字enum定义。 enum ShapeType{circle=10,square=20,a};  为指定值的成员会赋给它相邻的下一个整数值,a=21。 不能使用枚举成员进行迭代,不能自增自减。
         string,vector,迭代器:string表示可变长度的字符序列使用时加头文件<string>;   vector是长度可变的向量,使用时加头文件<vector>。用push_back(x)可以向vector的末尾插入元素,pop_back()可以删除vector的末尾。使用vector可以解决一些不确定数量的问题,v.size()返回元素个数。与数组相比,vector和string都很灵活;迭代器类似于指针类型,在容器或string类型上使用,指向对象是容器的元素或string中的字符,*it返回迭代器所指元素的引用,使用起来非常方便。                                                      文件数据处理:这里重点说输入流和输出流,输入流ifstream可以读入文件中的数据,输出流ofstream可以将数据输入到文件中去,使用时加上头文件<fstream>。
        函数:函数在类中时必不可少的,用来实现所需要的功能,语法形式为  返回类型  函数名(参数列表){函数体},函数是由用户定义的操作,函数的结果是返回值,类型称为函数返回类型,如果函数不返回任何结果,应将返回类型声明为void。函数名后的参数是形参,函数体里的参数是实参,函数在遇到return语句后结束。参数传递有传值和传引用两种,按值传递即实参值初始化形参,形参的改变不能影响实参的值,所以若要修改实参的值可以将形参声明为指针或引用。可以将函数声明为返回指针或引用,此时返回对象本身,返回引用时,修改返回值会改变实际返回的对象,可以用const声明返回值避免这种情况。重载函数的名字相同,功能相似,但参数个数或类型不同,实参会调用最佳函数。非指针和引用上的conat限定词不能区分重载函数,const限定指针或引用时可以区分。
        下面是这学期的重点内容,类:类的基本思想是数据抽象和封装,封装是指将对象和操作捆绑在一起,并加上访问控制。类中的成员包含数据成员和成员函数,成员函数一般写在类外,类通过访问限定符来限定成员的访问权限,包括public,private,protected,struct成员的默认访问权限为public,class成员的默认访问权限为private。每个成员函数都有一个隐含的参数,指向接收消息的对象,称为this指针,this在成员函数中常用于区分与局部变量重名的数据成员,返回当前对象,获取当前对象地址。类中要有get和set函数,用来访问和修改数据成员,还有有构造函数,构造函数的名字和类名相同,无返回类型,构造函数的参数为数据成员提供初始值,构造函数要写两个,一个不带参,一个带。析构函数负责在对象生存期结束时返回相关资源和自动释放资源,析构函数的名字是类名前加一个~,无返回类型,无参。const数据成员用来描述对象中的常量,一个类的对象也可以声明为常量,类的静态数据成员被当作类类型内部的全局变量,属于整个类,不专属于某个对象。静态数据成员不会与全局域中的名字冲突, 声明方式为在类的数据成员声明前加关键字static。                                                                                                                对象的初始化,复制和销毁:对象的初始化有默认初始化,直接初始化,拷贝初始化,列表初始化这几种方式。析构函数释放对象使用的资源,并销毁对象的非static数据成员。拷贝构造函数,用对象中的每个成员分别去初始化另一个对象中的对应成员,为浅复制,当类中包含指针或引用成员时,浅复制的行为并不适用,这是可以自己定义拷贝构造函数,对指针和引用的成员初始化。
        运算符重载:对于自己定义的类型,不能直接使用常用的运算符,这时可以进行运算符重载,实现对对象的整体操作,赋值运算符只能用成员函数重载,输入输出运算符在类外以非成员函数形式重载,要用到友元。对于类的成员运算符函数,一元运算符函数不需要提供参数,二元运算符提供一个参数作为右操作数。对于非成员函数,一元运算符要提供一个类类型的参数,二元运算符需要提供两个参数分别作为左、右操作数,其中至少一个参数必须是类类型的,通常声明为类的友元,以便访问私有数据成员。
        STL:分为容器,算法,迭代器。容器的共同操作有产生一个空容器,以另一个容器元素为初值完成初始化,以数组元素为初值完成初始化,size(),返回容器大小,empty(),判断容器是否为空,max_size()返回容器能容纳的最大元素数量,swap(),begin(),end(),insert(pos,e),将元素e的拷贝安插于迭代器pos所指的位置,erase(),clear()。迭代器用来遍历和指出特定位置。容器map,multimap,map中的元素是(key,value)数据对,其中value用来存数据,key用来做value的索引,定义map时,必须指明键类型和值类型,例如map<string,int>,map可以使用下标操作,插入元素用insert()。
        继承:格式为   
      class  派生类名字 : 访问限定符  基类名字
继承是面向对象的核心特征之一,是一种复用已有类的机制,被继承的类称为基类,继承得到的新类称为派生类,派生类继承了基类呃数据成员和成员函数,派生类可以再被继承。基类的public和protected成员在派生类中可以访问,但基类的private成员不可在派生类中访问。如果要在派生类中对继承的基类成员的可见性进行调整,用 using 声明,语法形式为  using Base::成员名;  ,派生类只能为它可以访问的名字提供using声明,不能改变基类私有成员的访问限制。构造函数,析构函数,赋值运算符函数不能被继承。在派生类中重新定义基类中的同名成员之后,原来基类中的名字在派生类中被隐藏。函数名相同且参数相同为覆盖,函数名相同但参数不同为隐藏。  继承最重要的特性之一是替代原则,在任何需要基类对象的地方,都可以由其公有派生类的对象代替。派生类中构造函数的格式一般为  派生类::派生类名(参数总表):参数名(参数表){}。构造函数的执行顺序:基类的构造函数→对象成员的构造函数→派生类的构造函数;在撤消派生类对象时,析构函数的执行顺序:派生类的析构函数→对象成员的析构函数→基类的析构函数。
        虚函数与多态: 多态性是指界面相同,多种实现。重载函数是多态性的一种简单形式。虚函数允许函数调用与函数体的联系在运行时才进行,称为动态联编。在成员函数前加上关键字virtual,为虚函数。class  base{ 
                       public :       
                         virtual  void  vf( ) ;     
};
class  paisheng: public  base{ 
                   public :      
                   void  vf( ) ;// 虚函数      
} ;
注意: 一个虚函数,在派生类层界面相同的重载函数都保持虚特性,虚函数必须是类的成员函数,虚函数可以是另一个类的友元,析构函数可以是虚函数,但构造函数不能是虚函数。虚函数的函数名,返回类型,参数个数,类型,顺序要和基类相同。一般通过基类指针访问虚函数时才能体现多态性。纯虚函数是一种特殊的虚函数,在许多情况下,在基类中不能对虚函数给出有意义的实现,而把它声明为纯虚函数,它的实现留给该基类的派生类去做。纯虚函数说明形式  virtual  类型  函数名(参数表)= 0 ;
        感悟:个人认为学习c++这门课最重要的是思考和动手实现,只是看课本知识,毫无用处,要把学的都用代码实现出来,这才是学习。

深度学习是机器学习的一个子领域,它于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十只兔子OVO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值