自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++ STL之谓词

概念:返回bool类型的仿函数称为谓词作用:对容器元素按自定义的函数规则执行#include <iostream>#include <vector>#include <algorithm>void printVector(std::vector<int>& v){ for (auto it = v.begin(); it != v.end(); ++it) std::cout << *it <<

2021-04-11 23:24:52 124

原创 C++ STL之函数对象(仿函数)

概念:重载函数调用操作符的类,其对象常称为函数对象 函数对象使用重载的()操作符时,行为类似函数调用,因此也称为仿函数 仿函数本质上是一个类,不是一个函数特点:仿函数可以像普通函数一样调用 仿函数可以有自己的状态(即成员属性) 仿函数可以作为函数参数传递#include <iostream>#include <vector>#include <string>class MyAdd{public: int operator()(int .

2021-04-06 00:24:57 135

原创 C++ STL之map常用操作详解

概念:map中所有元素都是pair类型 pair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值),起存储值的作用 所有元素都会根据key值进行自动排序,底层采用的是二叉树数据结构优点:根据key值能够快速找到对应value值 map中的key值都是唯一的常用操作:insert 插入元素 at 通过键值访问元素 [] 访问或插入元素 empty 检查容器是否...

2021-04-05 22:05:29 452

原创 C++ STL之queue常用操作详解

概念:queue(队列容器)是一种先进先出的数据结构,只允许在尾端插入元素,首端弹出元素

2021-04-05 12:36:40 501

原创 C++ STL之vector常用操作详解

概念:vector为动态单端数组,只能在一端进行元素添加与弹出,遵循先进后出原则,但支持随机访问常用操作:push_back //插入元素 pop_back //移除元素 empty //检查容器是否为空 size //返回元素个数 capacity //返回容器容量大小 [] //访问指定元素 at //...

2021-04-05 00:05:54 547

原创 C++ STL之string常用操作详解

本质:string本质上是一个类,内部封装了char*指针,内部管理内存的分配与释放构造函数:string() //默认构造函数,创建一个空字符串 string(const char* s) //使用字符串初始化 string(const string& str); //使用一个string对象初始化一个新string对象 string(int n,char c) /...

2021-04-04 00:15:58 232

原创 C++ 文件读操作

#include <iostream>#include <fstream>#include <string>#include <sstream>int main(){ //1.包含头文件 //fstream 读写操作 //ifstream 读操作 //2.创建流对象 std::ifstream ifs; //3.打开文件 ifs.open("test.txt", std::ios::in); if (!ifs.is_ope.

2021-03-28 23:36:16 81

原创 C++ 文件写操作

#include <fstream>int main(){ //1.包含文头文件 //fstream 读写操作 //ofstream 写操作 //ifstream 读操作 //2.创建流对象 std::ofstream ofs; //3.打开文件 ofs.open("test.txt", std::ios::out); //4.写入数据 ofs << "姓名:小明" << std::endl; ofs << "性别:男" .

2021-03-28 23:03:55 106

原创 C++ 虚析构

作用:发生多态时,若想子类执行其析构行为,需要将父类的析构函数加上virtual关键字变成虚析构函数,这样才能保证在对象释放时执行到子类的析构行为父类析构未加virtual关键字:#include <iostream>#include <string>class Animal{public: Animal() { std::cout << "Animal构造函数被调用" << std::endl; } //普通析构函数

2021-03-27 23:57:26 196

原创 C++ 多态原理

多态发生的条件:有继承关系 子类重写父类中的虚函数(重写是作用在不同作用域,重载是作用在相同作用域内) 通过父类指针或引用指向子类对象用VS开发人员工具查看发生多态时的对象内存模型:其中Cat类继承于Animal类且重写了Speak函数,Dog类仅继承于Animal类,没有发生重写#include <iostream>class Animal{public: virtual void Speak() { std::cout << "动物在说话"..

2021-03-27 22:39:40 66

原创 C++ 继承下的对象模型

#include <iostream>class Base {public: int m_a;protected: int m_b;private: int m_c;};class Son :public Base {private: int m_d;};int main(){ //父类中所有静态成员属性都会被子类继承 //父类中的私有成员属性被编译器隐藏了,因此访问不到,但确实被继承下去了 std::cout << "Son的大小...

2021-03-27 18:08:34 66

原创 C++ 友员

用friend关键字声明函数或类作用:让一个函数或者类可以访问另一个类中的私有成员#include <iostream>class PersonB;class PersonA { friend int GetMoney(PersonA* pA);//全局函数声明为友元函数 friend class PersonB;//类声明为友元类public: PersonA(int money) :m_money(money) { }private: int m_mon

2021-03-27 16:49:36 62

原创 C++ this指针

定义:this指针指向被调用的非静态成员所属的对象,简单理解:谁调用谁就是this,每一个包含有非静态成员的对象都隐含有this指针,无需进行定义,直接使用用途:当形参与成员变量同名时,可用this指针来区分 在类的非静态成员函数中返回对象本身,可使用return *this进行返回#include <iostream>class Person {public: Person(int age) { this->age = age; std::cout ..

2021-03-27 11:18:07 132

原创 C++ 对象模型

成员变量与成员函数分开存储,只有非静态成员变量才属于类的对象上空对象内存占用空间为1byte,为了保证空对象的唯一性,确保每一个对象都有一个独一无二的内存空间,因此分配1byte内存空间#include <iostream>class Person {};class Person2 { int m_a;//非静态成员变量属于类对象 static int m_b;//公用一份,不属于类对象 void func() {}//与非静态成员变量分开存储,不属于类对象

2021-03-27 10:41:05 52

原创 C++ 静态成员

静态成员变量所有对象共享同一份数据 在编译阶段分配内存 类内声明,类外初始化静态成员函数所有对象共享同一个函数 静态成员函数只能访问静态成员变量

2021-03-21 23:23:17 56

原创 C++ 初始化列表

作用:初始化成员属性,相比赋值初始化方法更高效、大气注意点:初始化列表的初始顺序与属性声明的顺序有关,而非初始化列表的顺序,但最好保持两者顺序相一致#include <iostream>class Person{public: Person() { std::cout << "默认构造函数调用" << std::endl; } //传统初始化方式 /*Person(int age, int height, int weight)

2021-03-21 23:07:11 70

原创 C++ 深拷贝与浅拷贝

浅拷贝:编译器默认提供,只是对属性值进行简单的赋值拷贝操作深拷贝:在堆区重新申请内存,再进行拷贝操作,在属性值含有指针成员时需进行深拷贝操作,避免多个指针同时指向一个相同的内存区域,容易出现野指针造成崩溃#include <iostream>class Person{public: Person() { std::cout << "默认构造函数调用" << std::endl; } Person(int age, const cha

2021-03-21 19:38:18 82

原创 C++ 构造函数

构造函数的调用规则默认情况下,编译器默认提供三个函数:默认无参构造函数 默认析构函数 默认拷贝构造函数(浅拷贝),对属性进行拷贝调用规则:如果用户定义有参构造函数,则编译器就不在提供无参构造函数,但拷贝构造函数依然提供 如果用户定义拷贝构造函数,则编译器不在提供其他构造函数拷贝构造函数调用时机使用已创建好的对象来初始化一个新对象,即在声明的同时进行初始化 值传递方式给函数参数传值 值方式返回局部对象赋值构造函数调用时机两个已创建好的对象进行赋值(即已声明对象),声明后再进

2021-03-21 18:52:16 83

原创 C++ 函数重载

作用:函数名相同,提高复用性函数重载满足条件:必须在同一作用域下 必须函数名相同 函数参数类型不同或者个数不同或者顺序不同注意:返回值类型不同不能作为重载的条件#include <iostream>void func(){ std::cout << "func() 被调用" << std::endl;}void func(int a){ std::cout << "func(int a) 被调用" <<

2021-03-20 22:56:34 60

原创 C++ 函数的默认参数

注意事项:如果某个位置开始有默认参数,则从这个位置往后都必须有默认参数 如果函数声明有了默认参数,函数定义就不能有默认参数,声明或定义中只能存在一份默认参数,避免引起二义性 #include <iostream>//如果某个位置开始有默认参数,则从这个位置往后都必须有默认参数,即b有默认参数,c必须也要有默认参数int func(int a, int b = 20, int c = 30){ return a + b + c;}//如果函数声明有了默认参数,函数定义就不

2021-03-20 22:38:07 94

原创 C++ 引用

引用的基本使用作用:给变量起别名 语法:数据类型 &别名 = 原名引用的注意事项(与指针的差异)引用必须初始化 引用在初始化后不可更改,即一旦初始绑定别名对象就不可更改对象引用做函数形参(引用最常用、最好用的用途)作用:函数传参时,可以利用引用技术让形参修改实参 优点:简化指针修改实参的方式,函数内部与值传递相同的写法,但能实现地址传递的作用,更清楚明了 #include <iostream>//值传递void swap01(int a, int b).

2021-03-20 22:10:47 47

原创 C++ 内存四区(代码区、全局区、栈区、堆区)

程序编译后、运行前划分代码区:存放程序的二进制代码(CPU可直接执行的机器指令),特点:共享(内存只保存一份代码)、只读(防止被修改) 全局区:存放全局变量、静态变量、字符串常量、const修饰的全局常量,在程序结束后由操作系统释放程序运行时划分栈区:存放函数的形参、局部变量,由编译器自动进行分配和释放 堆区:存放使用new操作符、malloc函数等分配的内存区域,生命周期由程序员自行管理,若不对其进行释放,将在程序运行结束后由操作系统进行回收#include <iostream&g

2021-03-20 20:18:38 363

原创 YUV Alpha Blend 推导过程

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言工作中需要实现YUV下基础图像处理功能,本文介绍YUV下Alpha Blend的公式推理过程,证明在YUV下实现Alpha Blend与在RGB空间下无效果差异。一、BGR与YUV BT601格式的转换关系YUV--->BGRB = 1.164(Y - 16) ..

2021-01-15 17:59:00 571

空空如也

空空如也

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

TA关注的人

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