C++
文章平均质量分 61
Cling槑
世上无难事,只要肯攀登。
展开
-
VS2013+Qt读取RAW图像
RAW图像读取原创 2022-09-09 17:15:29 · 696 阅读 · 1 评论 -
C++--二叉搜索树的应用
二叉搜索树的应用KV模型KV模型每个关键码key,都有与之对应的值value,即<key, value>的键值对。如:英汉词典就是英文与中文的对应关系<word, chinese>。二叉搜索树需要比较,键值对比较时,只比较key。#include<iostream>using namespace std;#include<time.h>template<class K, class V>struct BNode{ K _ke原创 2021-05-16 22:15:26 · 171 阅读 · 0 评论 -
C++--二叉搜索树
二叉搜索树1. 二叉搜索树2. 二叉搜索树的操作2.1 二叉搜索树的查找2.2 二叉搜索树的插入2.3 二叉搜索树的删除3. 二叉搜索树的性能分析1. 二叉搜索树二叉搜索树又称二叉排序树,性质:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值;若它的右子树不为空,则右子树上所有节点的值都大于根节点的值;它的左右子树也分别是二叉搜索树;可以是一棵空树。2. 二叉搜索树的操作二叉树的结构template<class T>struct BNode{ T原创 2021-05-16 22:14:58 · 318 阅读 · 5 评论 -
C++--多态--虚函数重写、抽象类
多态1. 多态的概念2. 多态的构成条件3. 虚函数4. 虚函数的重写4.1 虚函数的重写(覆盖)4.2 协变4.3 析构函数的重写4.4 override和final5. 重载、重写、重定义对比5.1 重载5.2 重写5.3 重定义6. 抽象类1. 多态的概念多态:多种形态;就是去完成某个行为,当不同的对象去完成时,会产生出不同的状态;2. 多态的构成条件多态是在不同继承关系的类对象中调用同一函数,产生了不同的行为;必须通过基类的指针或者引用调用虚函数;被调用的函数必须是虚函数,且派生类原创 2021-04-27 17:07:17 · 2924 阅读 · 1 评论 -
C++--继承和组合
继承和组合public继承是一种 is-a 的关系,组合是一种 has-a 的关系;一般优先使用对象组合,而不是类继承;继承允许根据基类的实现来定义派生类的实现,在继承方式中,基类的内部细节对子类可见。继承一定程度上破坏了基类的封装,基类的改变,对派生类有很大的影响,派生类与基类的依赖关系很强,耦合度很高;对象组合是类继承之外的一种复用选择。对象内部徐杰是不可见的,组合类之间没有很强的依赖关系,耦合度低,代码维护性好。//继承 is aclass Car{protected: str原创 2021-04-27 16:23:19 · 890 阅读 · 0 评论 -
C++--菱形继承
菱形继承1. 菱形继承2. 菱形虚拟继承1. 菱形继承单继承:一个子类只有一个直接父类时;多继承:一个子类有两个或以上直接父类时;菱形继承:是多继承的一种特殊情况;菱形继承有数据冗余和二义性的问题。2. 菱形虚拟继承...原创 2021-04-25 12:14:38 · 658 阅读 · 2 评论 -
C++--派生类中的默认成员函数
继承1. 派生类中的默认成员函数2. 继承与友元、静态成员1. 派生类中的默认成员函数6个默认成员函数:构造函数、析构函数、拷贝构造函数、赋值重载、取地址重载(普通对象和const对象取地址)派生类的构造函数必须调用基类的构造函数初始化基类的那一部分成员,如果基类没有默认的构造函数,则必须在派生类构造函数的初始化列表阶段显式调用;派生类拷贝构造函数必须调用基类的拷贝构造完成基类的拷贝初始化;派生类的operator=必须要调用基类的operator=完成基类的复制;派生类的析原创 2021-04-25 12:13:44 · 467 阅读 · 0 评论 -
C++--继承基本概念、对象赋值转换、作用域
继承1. 继承的基本概念1.1 继承的定义1.2 继承基类成员访问方式的变化2. 基类和派生类对象赋值转换3. 继承中的作用域1. 继承的基本概念继承是面向对象程序设计使代码复用的最重要的手段,允许在保持原有类特性的基础上进行扩展,增加功能,产生新的类,称为派生类/子类。继承是类设计层次的复用。1.1 继承的定义派生类 : 继承方式 基类class Student : public Person1.2 继承基类成员访问方式的变化父类成员在子类中的访问权限(除过父类中的私有成员):原创 2021-04-25 12:12:04 · 257 阅读 · 3 评论 -
C++--输入输出流
输入输出流1. 输入输出2. 输入输出流2.1 流2.2 C++标准IO流2.3 C++文件IO流3. stringstream1. 输入输出程序的输入:从输入文件将数据传送给程序;程序的输出:从程序将数据传送给输出文件;C++输入输出包括:对系统指定标准设备的输入输出,即从键盘输入数据,输出到显示器屏幕;以外存(磁盘、光盘)为对象进行输入输出,例如:从磁盘文件输入数据,数据输出到磁盘文件;对内存中指定的空间进行输入和输出。2. 输入输出流2.1 流输入和输出时数据传送的过程称原创 2021-04-21 22:29:25 · 1164 阅读 · 8 评论 -
C++--函数模板、类模板的特化及模板的分离编译
类模板1. 非类型模板参数2. 模板的特化2.1 函数模板特化2.2 类模板特化2.2.1 全特化2.2.2 偏特化3. 模板的分离编译4. 模板优缺点4.1 优点4.2 缺点1. 非类型模板参数模板参数分为:类型形参与非类型形参类型形参:出现在模板参数列表中,跟在class或者typename之后的参数类型名称;非类型形参:用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用。2. 模板的特化使用模板可以实现一些与类型无关的代码,但是对于一些特殊类型可能会出原创 2021-04-21 20:28:45 · 367 阅读 · 3 评论 -
C++--deque(双端队列)模拟实现stack和queue
deque1. deque的认识2. stack的实现(deque)3. queue的实现(deque)1. deque的认识deque(双端队列):是双开口的“连续”空间的数据结构,两端都可以进行插入和删除操作,时间复杂度为O(1);deque并不是真正的连续空间,而是由一段段连续的小空间拼接而成,分段连续,类似于一个动态的二维数组;与vector相比:头插和删除时,不需要搬移元素,效率特别高,扩容时也不需要搬移大量元素;与list相比:空间利用率比较高,不需要存储额外字段;缺陷:不适合遍历原创 2021-04-16 10:47:18 · 484 阅读 · 0 评论 -
C++--priority_queue 优先队列的操作及模拟实现
priority_queue1. priority_queue的常用操作2. priority_queue的模拟实现(vector)3. priority_queue的模拟实现(deque)1. priority_queue的常用操作优先队列默认使用vector作为其底层存储数据的容器,在vector上又使用了堆算法将vector中元素构造称堆的结构,因此优先队列就是堆。priority_queue(); --构造一个空的优先队列;empty(); --检查优先队列是否为空,是返回true,否返回原创 2021-04-16 10:30:20 · 238 阅读 · 0 评论 -
C++--stack 与 queue 的常用操作
文章目录1. stack的常用操作2. queue的常用操作1. stack的常用操作先进后出stack():构造空的栈;push:元素入栈;pop:元素出栈;top:返回栈顶元素的引用;empty:栈的判空;size:返回栈中元素个数。void test(){ stack<int> st;//构造 //入栈 st.push(1); st.push(2); st.push(3); st.push(4); while (!st.empty()) { co原创 2021-04-10 10:37:43 · 193 阅读 · 1 评论 -
C++--queue的模拟实现
queue的模拟实现用list模拟实现queue队列是一种容器适配器,用于FIFO(先进先出)操作,从容器一端插入元素,另一端提取元素。队列是作为容器适配器被实现的,queue提供一组特定的成员函数来访问元素,元素从队尾入队、队头出队。底层容器可以是标准或特定容器类模板,需要支持的操作有:判空、尾部入队、头部出队、返回队头队尾元素、返回元素个数。标准容器类deque和list可以实现,若未指定,则默认使用deque。用list模拟实现queuepush实现:push_back – 尾插;p原创 2021-04-10 10:25:10 · 551 阅读 · 2 评论 -
C++--stack的模拟实现
stack的模拟实现1. 用vector模拟实现stack2. 用list模拟实现stackstack是一种容量适配器,专门用在后进先出操作的上下文环境中,插入删除操作只能从容器的一端进行。stack是作为容器适配器被实现的,对特定类进行封装作为其底层的容器,提供特定的成员函数来访问其元素,进行压入和弹出的操作。stack的底层容器可以是任何标准或特定的容器类,这些容器类需要支持判空、尾插、尾删、获取尾部元素的操作,标准容器vector、list、deque皆符合这些需求,没有指定时,默认使用deq原创 2021-04-10 09:37:41 · 282 阅读 · 1 评论 -
C++-- vector 与 list 的对比
vector 与 list 的对比vector 与 list 都是STL中非常重要的序列式容器,由于两个容器的底层结构不同,导致其特性以及应用场景不同。vectorlist底层结构动态顺序表,一段连续空间带头结点的双向循环链表随机访问支持随机访问,访问某个元素效率O(1)不支持随机访问,访问某个元素效率O(N)插入和删除任意位置插入和删除效率低,需要搬移元素;时间复杂度为O(N),插入时有可能需要增容;增容:开辟新空间,拷贝元素,释放旧空间,导致效率更低原创 2021-04-10 00:22:22 · 1030 阅读 · 1 评论 -
C++--list的模拟实现
list的模拟实现1. list节点类2. list迭代器的实现3. list类的实现3.1 构造函数3.1.1 无参构造3.1.2 n个缺省值的构造3.1.3 迭代器区间的构造3.1.4 拷贝构造3.2 析构函数3.3 iterator3.4 capacity3.4.1 size3.4.2 empty3.5 access3.5.1 front3.5.2 back3.6 插入、删除3.6.1 insert3.6.2 erase3.6.3 push3.6.4 poplist 是可以在常数范围内在任意位置进原创 2021-04-09 23:43:38 · 327 阅读 · 1 评论 -
C++--list--常见构造、迭代器、修改操作
list1. 常见构造2. 迭代器list: 可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以在前后双向迭代。1. 常见构造constructor构造空的list;构造list中包含n个值;用[begin, end]左闭右开的区间构造;以数组为迭代器区间构造。void test(){ //构造空的list list<int> lst; list<char> lst2; //构造list中包含n个值 list<int>原创 2021-04-09 23:43:25 · 1302 阅读 · 0 评论 -
C++--vector的模拟实现
迭代器失效:迭代器失效迭代器指向的位置无效:空间释放(非法访问)指向发生了变化(错位)空间位置变化或者删除,都会引起迭代器失效解决方式: 重新获取迭代器,即在使用前,对迭代器重新赋值。...原创 2021-04-07 23:13:33 · 313 阅读 · 0 评论 -
C++--vector--修改操作
vectorvector的修改操作vector的修改操作assign :分配新内容,替换当前内容pop_back :尾删元素push_back :尾插元素template <class T>void printFor(const vector<T>& vec){ for (const auto& e : vec) { cout << e << " "; } cout << endl;}vo原创 2021-04-06 22:40:39 · 5558 阅读 · 0 评论 -
C++--vector--构造、迭代器、元素访问、容量操作
vector的操作原创 2021-04-06 20:13:00 · 990 阅读 · 0 评论 -
C++--string类的模拟实现
实现string类的构造、拷贝构造、赋值运算符重载以及析构函数原创 2021-04-01 21:18:19 · 708 阅读 · 5 评论 -
C++--string类-字符串操作
cplusplus reference–stringcppreference–stringstring类的字符串操作find – 在字符串中查找内容void test12(){ string str = "12345abcd123456789"; string str2 = "123456789"; size_t pos = str.find(str2); //9 第九个位置 pos = str.find("abc", 5, 3); //5 第五个位置 pos = str.find(原创 2021-03-20 23:26:07 · 378 阅读 · 3 评论 -
C++--string类-修改操作
cplusplus reference–stringcppreference–stringstring类对象的修改操作push_back – 在字符串后尾插字符cvoid test(){ //增容规则:1.5倍 string str; //提前开好空间,避免频繁增容,提高代码的效率 str.reserve(200); int cap = str.capacity(); cout << cap << endl; for (int i = 0; i <原创 2021-03-20 23:25:32 · 1210 阅读 · 0 评论 -
C++--string类-容量操作
cplusplus reference–stringcppreference–stringstring类对象的容量操作size – 返回字符串的长度length – 返回字符串的长度capacity – 返回当前分配给字符的存储空间的大小,以字节表示max_size – 返回字符串可以达到的最大长度resize – 将字符串调整成n字符的长度reserve – 请求将字符串容量调整为n字符的计划更改clear – 清楚字符串的内容,该字符串变为空字符串,长度为0个字符empty – 返原创 2021-03-20 23:25:13 · 736 阅读 · 0 评论 -
C++--string类-常见构造、元素访问、迭代器
文章目录1. C语言中的string类2. 标准库中的string类1. C语言中的string类2. 标准库中的string类(1)原创 2021-03-20 23:24:52 · 602 阅读 · 0 评论 -
C++--模板
文章目录1. 泛型编程2. 函数模板3. 类模板1. 泛型编程2. 函数模板3. 类模板原创 2021-03-17 18:57:03 · 226 阅读 · 1 评论 -
C++--内存管理
文章目录1.2. C语言动态内存管理方式malloc/calloc/realloc和free3. C++内存管理方式new/delete操作内置类型new/delete操作自定义类型1.2. C语言动态内存管理方式malloc/calloc/realloc和free3. C++内存管理方式new/delete操作内置类型new/delete操作自定义类型...原创 2021-03-16 23:34:15 · 231 阅读 · 0 评论 -
C++--STL(标准模板库)
文章目录1. STL2. STL版本3. STL的六大组件4. STL的缺陷1. STLSTL是C++标准库的重要组成部分,是一个可复用的组件库,是一个包罗数据结构与算法的软件框架。2. STL版本原始版本P.J.版本RW版本SGI版本3. STL的六大组件仿函数:算法:迭代器:空间配置器:容器:配接器:4. STL的缺陷STL库的更新太慢;STL不支持线程安全,并发环境下需要自己加锁,且锁的粒度是比较大的;STL极度追求效率,导致内部比较复杂,比如类型萃取原创 2021-03-15 22:57:07 · 237 阅读 · 0 评论 -
C++--类与对象(三)
文章目录1. 构造函数(扩充)(1)构造函数体赋值(2)初始化列表(3)explicit关键字2. static3.友元1. 构造函数(扩充)(1)构造函数体赋值(2)初始化列表(3)explicit关键字2. static3.友元原创 2021-03-11 15:20:19 · 526 阅读 · 6 评论 -
C++--赋值运算符重载
日期类的实现获取某年某日的天数 int GetMonthDay(int year, int month) { static int days[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 }; int day = days[month]; if (month == 2 && ((year % 4 == 0) && (year % 100 != 0) || year % 400 == 0)) { day原创 2021-03-11 08:00:24 · 321 阅读 · 3 评论 -
C++--类与对象(二)
文章目录1. 构造函数2. 析构函数3. 拷贝构造函数4. 赋值操作符重载5. const成员函数6. 取地址及const取地址操作符重载1. 构造函数特性函数名与类名相同无返回值构造函数可以重载对象实例化时编译器自动调用对应的构造函数在对象的生命周期内只调用一次不是开空间创建对象,而是初始化对象2. 析构函数3. 拷贝构造函数4. 赋值操作符重载5. const成员函数6. 取地址及const取地址操作符重载...原创 2021-03-10 22:51:10 · 233 阅读 · 4 评论 -
C++--日期类的实现
日期类的实现–赋值运算符重载#include<iostream>using namespace std;class Date{public: // 获取某年某月的天数 int GetMonthDay(int year, int month) { static int days[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 }; int day = days[month]; if (month == 2 && (原创 2021-03-10 22:49:28 · 252 阅读 · 0 评论 -
C++--类与对象(一)
文章目录1. 类的定义2. 类的访问限定符3. 类的大小4. this指针1. 类的定义class为定义类的关键字,className为类的名字,{}中为类的主体。class className { //类体:由成员函数和成员变量组成};类的定义方式:①声明和定义全部放在类体中,②声明放在.h文件中,类的定义放在.cpp文件中。//C++中常用的定义类方式 class 类名 {所有成员};//声明和定义全部放在类体中class Student{public: //成员原创 2021-03-03 18:46:51 · 228 阅读 · 1 评论 -
C++--入门
文章目录1. 命名空间2. 缺省参数3. 函数重载4. 引用5. 内联函数6. 基于范围的for循环1. 命名空间使用命名空间是对标识符的名称进行本地化,以避免命名冲突或名字污染。定义命名空间,namespace+命名空间名称{变量,函数}//普通的命名空间namespace N1{ int a = 0; void fun1() { printf("N1:fun1()\n"); } //嵌套 namespace N2 { int a = 1; void fun1()原创 2021-03-03 18:45:38 · 293 阅读 · 1 评论