C/C++
李嘉图Y
凡是过往,皆为序章
展开
-
第六天之重载重写重定义
函数重载必须在同一个类中进行子类无法重载父类的函数,父类同名函数将被名称覆盖重载是在编译期间根据参数类型和个数决定函数调用函数重写必须发生于父类与子类之间并且父类与子类中的函数必须有完全相同的原型使用virtual声明之后能够产生多态(如果不使用virtual,那叫重定义)多态是在运行期间根据具体对象的类型决定函数调用实例:#define _CRT_SECURE_NO_WAR...原创 2021-01-26 09:10:13 · 1190 阅读 · 0 评论 -
第十二天之常用STL算法
案例:#define D_SCL_SECURE_NO_WARNINGS#include<iostream>using namespace std;#include "list"#include "vector"#include "string"#include "algorithm"#include "set"#include "functional"#inclu...原创 2020-01-01 20:35:12 · 436 阅读 · 0 评论 -
第十二天之for_each函数和transform函数的异同
/*//回调函数//一般情况下:for_each 所使用的函数对象,参数是引用,没有返回值void showElem(int &n){ cout << n << " ";}*///transform回调函数//transform 所使用的函数对象,参数一般不使用引用,而是还有返回值int showElem2(int n){ cout <&...原创 2019-12-26 14:59:24 · 437 阅读 · 0 评论 -
第十二天之常用遍历算法_for_each和transform
for_each()for_each: 用指定函数依次对指定范围内所有元素进行迭代访问。该函数不得修改序列中的元素。函数定义。for_each(begin, end, func);template<class _InIt,class _Fn1> inline_Fn1 for_each(_InIt _First, _InIt _Last, _Fn1 _Func){ //...原创 2019-12-26 14:41:05 · 525 阅读 · 0 评论 -
第十二天之答疑_C++的函数对象与谓词
函数对象或仿函数functor(函数对象或函数)形式:object + ()这包括正常函数,函数指针和 () 运算符(函数调用运算符)重载的类对象,即为其定义函数 operator()() 类。有时我们可以在普通函数不起作用时使用函数对象。STL经常使用函数对象并提供几个非常有用的函数对象。函数对象是泛型编程的力量和纯抽象概念的另一个例子。我们可以说任何行为都像函数的对象是函数。因此,如果...原创 2019-12-26 10:19:34 · 521 阅读 · 0 评论 -
第十二天之STL算法的设计理念
STL 的容器算法迭代器的设计理念1) STL 的容器通过类模板技术,实现数据类型和容器模型的分离2) STL 的迭代器技术实现了遍历容器的统一方法;也为 STL 的算法提供了统一性奠定了基础3) STL 的算法,通过函数对象实现了自定义数据类型的算法运算;所以说:STL 的算法也提供了统一性。核心思想:其实函数对象本质就是回调函数,回调函数的思想:就是任务的编写者和任务的调用者有效解耦合...原创 2019-12-25 20:57:37 · 539 阅读 · 0 评论 -
第十二天之预定义函数对象和函数适配器
预定义函数对象1)预定义函数对象基本概念:标准模板库 STL 提前定义了很多预定义函数对象,#include 必须包含//1 使用预定义函数对象://类模板 plus<> 的实现了: 不同类型的数据进行加法运算void main41(){plus<int> intAdd;int x = 10;int y = 20;int z = intAdd(x, y)...原创 2019-12-24 15:47:24 · 456 阅读 · 0 评论 -
第十二天之二元谓词在集合中的应用
struct CompareNoCase{ bool operator()(const string &str1, const string &str2) { string str3; //全部变成小写 str3.resize(str1.size()); transform(str1.begin(), str1.end(), str3.begin(), tolow...原创 2019-12-24 11:38:01 · 518 阅读 · 0 评论 -
第十二天之STL算法设计理念_算法中的函数对象和谓词
函数对象和谓词定义函数对象:重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象。一个类对象,表现出一个函数的特征,就是通过“对象名+(参数列表)”的方式使用一个类对象,如果没有上下文,完全可以把它看作一个函数对待。这是通过重载类的 operator()来实现的。“在标准库中,函数对象被广泛地使用以获得弹性”,标准库中的很多算法都可...原创 2019-12-23 19:27:04 · 423 阅读 · 0 评论 -
第十二天之容器共性机制研究
容器的共通能力C++模板是容器的概念。**理论提高:**所有容器提供的都是值(value)语意,而非引用(reference)语意。容器执行插入元素的操作时,内部实施拷贝动作。所以 STL 容器内存储的元素必须能够被拷贝(必须提供拷贝构造函数)。除了 queue 与 stack 外,每个容器都提供可返回迭代器的函数,运用返回的迭代器就可以访问元素。通常 STL 不会丢出异常。要求使用者...原创 2019-12-19 20:35:41 · 424 阅读 · 0 评论 -
第十二天之map与multimap容器
map与multimap容器简介map 是标准的关联式容器,一个 map 是一个键值对序列,即(key,value)对。它提供基于 key 的快速检索能力。map 中 key 值是唯一的。集合中的元素按一定的顺序排列。元素插入过程是按排序规则插入,所以不能指定插入位置。map 的具体实现采用红黑树变体的平衡二叉树的数据结构。在插入操作和删除操作上比 vector 快。map 可以直接...原创 2019-12-19 20:09:58 · 657 阅读 · 0 评论 -
第十一天之set和multiset容器
set和multiset简介set是一个集合容器,其中所包含的元素是唯一的,集合中的元素按照一定的元素排列。元素的插入过程是按照排序的规则插入的,所以不能指定插入的位置。set是采用红黑树的变体的数据结构来实现的,红黑树采用的是平衡二叉树,在插入操作和删除操作上要比vector快set不能直接存取元素。(不可以使用at(pos)与[]的方式访问元素)multiset和set的区别是:se...原创 2019-12-19 11:18:02 · 432 阅读 · 0 评论 -
第十一天之优先级队列
优先级队列的简介包括最大优先级队列、最小优先级队列priority_queue<int, deque<int>> pq;priority_queue<int, vector<int>> pq;pq.empty()pq.size()pq.top()pq.pop()pq.push(item)#include <iostream...原创 2019-12-18 14:39:31 · 419 阅读 · 0 评论 -
第十一条之list容器
list简介list 是一个双向链表容器,可高效地进行插入删除元素。list 不可以随机存取元素,所以不支持 at.(pos)函数与[]操作符。It++(ok) it+5(err)#include list的默认构造list 采用采用模板类实现,对象的默认构造形式:list<T> lstT; 如:list<int> lstInt; //定义一个存放 int 的 ...原创 2019-12-18 14:16:10 · 1428 阅读 · 0 评论 -
第十一天之queue容器
queue简介queue是队列容器,是一种先进先出的容器queue是简单的装饰了deque容器而成为的另一种容器头文件需包含#includequeue对象的默认构造queue 采用模板类实现,queue 对象的默认构造形式:queue queT; 如:queue queInt; //一个存放 int 的 queue 容器。queue queFloat; //一个存放 float 的 ...原创 2019-12-17 21:24:19 · 361 阅读 · 0 评论 -
第十一天之stack容器
stack容器简介:stack是堆栈容器:是一种先进后出的容器stack是简单的装饰了deque容器而成为另一种容器需要包含头文件#includestack对象的默认构造stack 采用模板类实现, stack 对象的默认构造形式: stack stkT;stack stkInt; //一个存放 int 的 stack 容器。stack stkFloat; //一个存放 flo...原创 2019-12-17 21:01:47 · 424 阅读 · 0 评论 -
第十一天之deque容器
deque简介deque是“double-ended queue”的缩写,和vector一样是STL的容器,deque是双端数组,而vector是单端数组deque在接口上和vector是相同的,在许多的操作上可以替换。deque可以随机存取元素deque头部和尾部添加或移出元素都非常的快捷,但在中部安插元素或移出元素比较费时。头文件#includedeque对象的默认构造deque...原创 2019-12-17 16:03:32 · 373 阅读 · 0 评论 -
第十一天之STL的vector容器
1、vector容器简介vector是将元素放入一个动态数组中加以管理的容器vector可以随机存取元素,支持索引值直接存取,用[]操作符或者at()方法vector尾部添加或移出元素非常快速,但是在中部或者尾部插入或者移出元素会很费时间2、vector对象默认构造vector 采用模板类实现,vector 对象的默认构造形式vector<T> vecT; vector&...原创 2019-12-17 12:52:42 · 408 阅读 · 1 评论 -
第十一天之STL的String
String的概念string是STL的字符串类,通常用来表示字符串,而在使用string之前,字符串通常使用char 来表示的,string 与 char都可以表示字符串*string和char 的比较:1)string是一个类,char *是一个指向字符的指针2)string中封装了char *,管理这个字符串,是一个char *类型的容器3)string不用考虑内存释放和越界。4...原创 2019-12-16 16:10:36 · 430 阅读 · 0 评论 -
第十一天之模板简要回顾
1)模板是实现代码重用机制的一种工具,实质就是实现类型参数化,即把类型定义为参数2)C++提供两种模板:函数模板,类模板函数模板的简介1)函数模板就是建立一个通用的函数,其函数返回类型和形参类型不具体指定,而是用虚拟的类型来代表。2)凡是函数体相同的函数都可以用函数模板来代替,不必定义多个函数,只需在模板中定义一次即可3)在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了...原创 2019-12-16 13:20:06 · 378 阅读 · 0 评论 -
第十一天之STL(标准模板库)理论基础
基本概念STL(Standand Template Library)标准模板库是惠普实验室开发的一系列软件的统称。现在主要出现在C++中但在引入C++之前该技术就出现很长一段时间了。STL从广义上讲分为三类:algorithm(算法)、container(容器)和 iterator(迭代器),容器和算法可以通过迭代器进行无缝的连接。几乎所有的代码都是采用模板类和模板函数的方式。这相比于传统的由...原创 2019-12-15 18:06:50 · 511 阅读 · 0 评论 -
第十天之文件流类和文件流对象
文件流类和文件流对象输入输出是以系统指定的标准设备(输入设备为键盘,输出设备为显示器)为对象的。在实际应用中,常以磁盘文件作为对象。即从磁盘文件读取数据,将数据输出到磁盘文件。和文件有关系的输入输出类主要在 fstream.h 这个头文件中被定义,在这个头文件中主要被定义了三个类,由这三个类控制对文件的各种输入输出操 作,他们分别是 ifstream、ofstream、fstream,其...原创 2019-11-29 22:13:48 · 831 阅读 · 0 评论 -
第十天之标准输出流
标准输出流/*标准输出流对象 coutcout.flush()cout.put()cout.write()cout.width()cout.fill()cout.setf(标记)*/案例一://cout.putvoid main(){ cout << "hello" << endl; cout.put('h').put('e').put('l'...原创 2019-11-28 21:54:28 · 549 阅读 · 0 评论 -
第十天之标准输入流
标准 I/O 对象:cin,cout,cerr,clogcout 流对象cont 是 console output 的缩写,意为在控制台(终端显示器)的输出。强调几点。1) cout 不是 C++预定义的关键字,它是 ostream 流类的对象,在 iostream 中定义。 顾名思义,流是流动的数据,cout 流是流向显示器的数据。cout 流中的数据是用流插入运算符“<<”...原创 2019-11-28 21:41:19 · 963 阅读 · 0 评论 -
第十天之C++输入和输出流介绍
I/O 流的概念和流类库的结构程序的输入指的是从输入文件将数据传送给程序,程序的输出指的是从程序将数据传送给输出文件。C++输入输出包含以下三个方面的内容:对系统指定的标准设备的输入和输出。即从键盘输入数据,输出到显示器屏幕。这种输入输出称为标准的输入输出,简称标准 I/O。以外存磁盘文件为对象进行输入和输出,即从磁盘文件输入数据,数据输出到磁盘文件。以外存文件为对象的输入输出称为文...原创 2019-11-28 12:47:09 · 470 阅读 · 0 评论 -
第十天之C++标准异常库
标准程序库异常案例一:// out_of_range#include "iostream"using namespace std;#include <stdexcept> class Teacher{public:Teacher(int age) //构造函数, 通过异常机制 处理错误{if (age > 100){throw out_of_rang...原创 2019-11-25 20:35:08 · 439 阅读 · 0 评论 -
第十天之异常的层次结构(继承在异常中的应用)
案例:设计一个数组类 MyArray,重载[]操作,数组初始化时,对数组的个数进行有效检查1) index<0 抛出异常 eNegative2) index = 0 抛出异常 eZero3)index>1000 抛出异常 eTooBig4)index<10 抛出异常 eTooSmall5)eSize 类是以上类的父类,实现有参数构造、并定义 virtual void ...原创 2019-11-25 20:14:32 · 385 阅读 · 0 评论 -
第十天之异常类型和异常变量的生命周期
异常类型和异常变量的生命周期1)throw 的异常是有类型的,可以使,数字、字符串、类对象。2)throw 的异常是有类型的,catch 严格按照类型进行匹配。3)注意 异常对象的内存模型 。#include<iostream>using namespace std;//1、传统的出错处理机制 返回值int my_strcpy(char *to, char *from...原创 2019-11-24 21:12:20 · 492 阅读 · 0 评论 -
第十天之栈解旋和异常接口声明
异常被抛出后,从进入 try 块起,到异常被抛掷前,这期间在栈上的构造的所有对象,都会被自动析构。析构的顺序与构造的顺序相反。这一过程称为栈的解旋(unwinding)。#include<iostream>using namespace std;class TestA{public: TestA(int a=0,int b=0) { this->a = a...原创 2019-11-24 19:24:29 · 391 阅读 · 0 评论 -
第十天之异常处理
异常处理机制原创 2019-11-23 20:22:29 · 393 阅读 · 0 评论 -
第十天之C++的类型转换
类型转换名称和语法C风格的强制类型转换(Type Cast)很简单,不管是这么类型的转换统统是TYPE b = (TYPE)a;C++风格的类型转换提供了四种类型转换操作符,类应对不同场合的应用static_cast 静态类型转换。如int转换成charreinterpreter_cast 重新解释类型dynamic_cast 动态类型转换,如子类和父类之间多态雷子那个转换...原创 2019-11-23 15:12:07 · 377 阅读 · 0 评论 -
第十天之类模板作业
封装你自己的数组类;设计被存储的元素为类对象;思考:类对象的类,应该实现的功能。//1 优化 Teacher 类, 属性变成 char panme, 构造函数里面 分配内存//2 优化 Teacher 类,析构函数 释放 panme 指向的内存空间//3 优化 Teacher 类,避免浅拷贝 重载= 重写拷贝构造函数//4 优化 Teacher 类,在 Teacher 增加 <&l...原创 2019-11-23 13:25:30 · 413 阅读 · 0 评论 -
第九天之类模板在项目开发中的应用案例_数组模板类
类模板小结模板是 C++类型参数化的多态工具。C++提供函数模板和类模板。模板定义以模板说明开始。类属参数必须在模板定义中至少出现一次。同一个类属参数可以用于多个模板。类属参数可用于函数的参数类型、返回类型和声明函数中的变量。模板由编译器根据实际数据类型实例化,生成可执行代码。实例化的函数。模板称为模板函数;实例化的类模板称为模板类。函数模板可以用多种方式重载。类模板可以在类层次中...原创 2019-11-19 19:41:02 · 412 阅读 · 0 评论 -
第九天之类模板中的static关键字
1)从类模板实例化的每个模板类有自己的类模板数据成员,该模板类的所有对象共享一个 static 数据成员2)和非模板类的 static 数据成员一样,模板类的 static 数据成员也应该在文件范围定义和初始化3) 每个模板类有自己的类模板的 static 数据成员副本#include <iostream>using namespace std;template <...原创 2019-11-19 14:07:01 · 379 阅读 · 0 评论 -
第九天之类模板语法知识体系梳理
所有的类模板函数写在类的内部#include "iostream"using namespace std;template <typename T>class Complex{public: friend Complex MySub(Complex &c1, Complex &c2) { Complex temp(c1.a - c2.a, c1....原创 2019-11-18 22:37:57 · 404 阅读 · 0 评论 -
第九天之类模板
为什么需要类模板类模板与函数模板的定义和使用类似,有时,有两个或者多个类,其功能是相同的,仅仅是数据类型不同,如下面声明的一个类:类模板用于实现类所需数据的类型参数化类模板在表示如数组、表、图等数据结构显得特别重要, 这些数据结构的表示和算法不受所包含的元素类型的影响单个类模板的语法#include "iostream"using namespace std;template ...原创 2019-11-18 14:39:24 · 398 阅读 · 0 评论 -
第九天之C++编译器模板机制剖析
C++编译器模板机制剖析思考:为什么函数模板可以和函数重载放在一块。C++编译器是如何提供函数模板机制的?编译器编译原理什么是 gccgcc(GNU C Compiler)编译器的作者是 Richard Stallman,也是 GNU 项目的奠基者。什么是 gcc:gcc 是 GNU Compiler Collection 的缩写。最初是作为 C 语言的编译器(GNU CCompile...原创 2019-11-18 13:47:52 · 414 阅读 · 0 评论 -
第九天之模板函数和函数重载问题探究
普通函数和模板函数的区别函数模板和普通函数区别结论:函数模板不允许自动类型转化普通函数能够进行自动类型转换案例:#include <iostream>using namespace std;//提出问题:函数的业务逻辑一样,只是函数的参数类型不一样 有没有更好的机制void myswap01(int &a, int &b){ int c = 0;...原创 2019-11-17 21:38:28 · 420 阅读 · 0 评论 -
第九天之函数模板
为什么要有函数模板需求:写 n 个函数,交换 char 类型、int 类型、double 类型变量的值。函数模板定义形式template < 类型形式参数表 >类型形式参数的形式为:typename T1 , typename T2 , …… , typename Tn 或 class T1 , class T2 , …… , class Tn函数模板调用myswap(...原创 2019-11-17 17:44:51 · 379 阅读 · 0 评论 -
第八天之C++基础课程大纲
原创 2019-11-17 11:54:44 · 382 阅读 · 0 评论