![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
KylerLiZi
这个作者很懒,什么都没留下…
展开
-
【C++ 11】emplace_back()和push_back()的区别
emplace_back()函数是C++11 新增加的,其功能和 push_back() 相同,都是在 vector 容器的尾部添加一个元素。区别就在于底层实现的机制不同。push_back() 向容器尾部添加元素时,首先会创建这个元素,然后再将这个元素拷贝或者移动到容器中(如果是拷贝的话,事后会自行销毁先前创建的这个元素);而 emplace_back() 在实现时,则是直接在容器尾部创建这个元素,省去了拷贝或移动元素的过程。总而言之,emplace_back() 的执行效率比 push_ba..原创 2021-08-30 21:18:19 · 846 阅读 · 0 评论 -
【C++】运行时类型识别RTTI与反射详解
RTTIRTTI(Run-Time Type Information)运行时类型识别的英文缩写,它提供了运行时确定对象类型的方法。面向对象的编程语言,像C++,Java,delphi都提供了对RTTI的支持。 本文将描述 RTTI 的概念、简略介绍 RTTI 的一些背景知识、并通过具体例子和代码介绍什么时候使用以及如何使用 RTTI的两个重要运算符 typeid 和 dynamic_cast的使用方法。背景知识其实,RTTI 在C++中并不是什么新的东西,它早在十多年以前就已经出现了。但是大多数原创 2020-07-11 15:04:29 · 1724 阅读 · 0 评论 -
【C++】结构体/联合中的数据成员对齐规则
对齐规则1、每个数据成员在内存中的存储起始位置必须是自身大小的整数倍,如32位下的int占4个字节,则存储地址必须是4的整数倍。struct node{ char a;//起始0是1的倍数,a存放在0 int b;//起始1不是4的倍数,起始调整为4,b存放在4};sizeof(node) = 82、若结构体node里有其他的结构体成员node2,则结构体成员node2要从其内部最大元素大小的整数倍地址开始存储。struct node//共占16字节{ ...原创 2020-05-21 18:13:07 · 347 阅读 · 0 评论 -
【C++】编译过程
C++编译过程可分为四个阶段预处理阶段:对源代码文件中文件包含关系(头文件)、预编译语句(宏定义)进行分析和替换,生成预编译文件。编译阶段:将经过预处理后的预编译文件转换成特定汇编代码,生成汇编文件。汇编阶段:将编译阶段生成的汇编文件转化成机器码,生成可重定位目标文件。链接阶段:将多个目标文件及所需要的库连接成最终的可执行目标文件。...原创 2020-05-21 16:05:05 · 176 阅读 · 0 评论 -
【C++】构造函数、析构函数可以是虚函数么?
构造函数不能是虚函数1、创建一个对象必须明确指出它的类型,否则无法创建,一个对象创建成功,编译器获得它的实际类型,然后去调用对应的函数,而如果构造函数声明为虚函数,会形成一个死锁,虚函数是在运行才能确定确定其调用哪一个类型的函数,而具体哪一个类型是编译器通过对象的类型去确定的,但是此时对象还未创建也就没法知道其真实类型。2、虚函数对应一张虚函数表,这个虚函数表是存储在对象的内存空间的,如果构造函数是虚函数就需要通过虚函数表来调用,可是对象还没有实例化,也就是内存空间还没有,找不到虚函数表,所以构造函原创 2020-05-21 16:01:13 · 818 阅读 · 1 评论 -
【C++】虚函数、纯虚函数、多态与虚表机制详解
虚函数在类的定义中,前面有 virtual 关键字的成员函数就是虚函数。注:派生类中的成员函数 与 基类中虚函数同名且同参数的函数,不加virtual也自动成为虚函数。多态多态的实现是通过虚函数。多态的作用是增强程序的可扩充性,即程序需要修改或增加功能的时候,需要改动和增加的代码较少。多态的关键在于通过基类指针或引用调用一个虚函数时,编译阶段不能确定到底调用的是基类还是派生类的函数,运行时才能够确定——这叫动态联编。虚函数因为用了虚函数表机制,调用的时候会增加内存开销,具体见下文。原创 2020-05-21 15:16:45 · 1263 阅读 · 0 评论 -
【C++ 算法】快排优化之基准选择与方法
三数取中(选基准)+插排(优化)+三向切分聚集重复值(优化)的时间复杂度同STL中的Sort近似。一、基准的选择最理想的方法是,选择的基准恰好能把待排序序列分成两个等长的子序列。1、随机选取基准:在待排序列是部分有序时,固定选取枢轴使快排效率底下,要缓解这种情况,就引入了随机选取枢轴。思想:取待排序列中任意一个元素作为基准。2、三数取中:使用左端、右端和中心位置上的三个元素比较,大小为中值的作为枢纽元。注:使用三数取中选择枢轴优势还是很明显的,但是还是处理不了重复数组二、优化的方原创 2020-05-18 17:51:49 · 706 阅读 · 0 评论 -
【C++】Static的用法分类详解
1 全局静态变量在全局变量前加上关键字static,全局变量就定义成一个全局静态变量内存中的位置:静态存储区,在整个程序运行期间一直存在初始化:未经初始化的全局静态变量会被自动初始化为0(自动对象的值是任意的,除非他被显式初始化)作用域:全局静态变量在声明他的文件之外是不可见的,准确地说是从定义之处开始,到文件结尾2局部静态变量在局部变量之前加上关键字static,局部变量就成为一个局部静态变量内存中的位置:静态存储区初始化:未经初始化的全局静态变量会被自动初始化为0(自动.原创 2020-05-18 17:25:45 · 187 阅读 · 0 评论 -
【C++】运算符重载
定义运算符重载,就是对已有的运算符(C++中预定义的运算符)赋予多重的含义,使同一运算符作用于不同类型的数据时导致不同类型的行为。对运算符进行重载的时候,好的风格是应该尽量保留运算符原本的类型。目的扩展C++中提供的运算符的适用范围,使之能作用于对象。实质函数重载。可以重载为普通函数,也可以重载为成员函数。形式返回值类型 operator 运算符(形参表){ ……}加减运算符重载示例Complex_a和Complex_b是两个复数对象;求两个复数的和,原创 2020-05-18 17:02:36 · 288 阅读 · 0 评论 -
【C++】复制构造函数与类型转换构造函数
基础概念复制构造参数只有一个参数,即对同类对象的引用,形如:X::X(X&) 或 X::X(const X&),常用后者。若用户未定义,则编辑器会生成默认的复制构造函数,完成复制的功能。class Complex { private: double real,imag; }; Complex c1; //调用缺省无参构造函数 Complex c2(c1);//调用缺省的复制构造函数,将 c2 初始化成和c1一样注:不允许有形如X::X原创 2020-05-17 16:48:52 · 1062 阅读 · 0 评论 -
【C++】i++=5编译报错,i++不能作为左值的原因
左值与右值首先,我们需要明确左值与右值的定义。一个简单的理解就是,对于每个变量,均是可寻址的,均与两个值有关:它的数据值——存储在某个内存空间中,不占有确定位置的表达式,被称为右值(rvalue)。 它的地址值——存储数据值的内存的地址,占有确定的位置,被称为左值(lvalue)。i++不能作为左值的原因int i = 0; i++=5;编译报错!由于i++的内部实现是创建...原创 2020-04-21 15:25:57 · 995 阅读 · 0 评论 -
【C++】++i与i++哪个性能更优
对于基本类型比如int等,两者性能没有区别。 对于符合对象比如类、结构体等,++i的性能优于i++。原因是i++会产生临时对象,生成一个拷贝,若拷贝对象的内容较多,则会增加很多开销。举个栗子:i++的运算过程如下:int temp = i ; i = i + 1 ; return temp ;++i的运算过程如下:return i+1;...原创 2020-04-20 11:07:09 · 862 阅读 · 0 评论 -
【C++】cin.ignore() 的用法
概念cin.sync()的功能是清空缓冲区,而cin.ignore()虽然也是删除缓冲区中数据的作用,但其对缓冲区中的删除数据控制的较精确。有时候你只想取缓冲区的一部分,而舍弃另一部分,这是就可以使用cin.ignore(),其使用方法是:cin.ignore(int intExp, char chExp);其中intExp 是一个整型表达式,也可以是一个整型数值,这个数值表示在...转载 2020-03-16 11:40:01 · 1768 阅读 · 0 评论 -
【C++】set的常用用法总结
一、概念set是STL中一种标准关联容器。它底层使用平衡的搜索树——红黑树实现,插入删除操作时仅仅需要指针操作节点即可完成,不涉及到内存移动和拷贝,所以效率比较高。set顾名思义是“集合”的意思,在set中元素都是唯一的,而且默认情况下会对元素自动进行升序排列,支持集合的交(set_intersection),差(set_difference) 并(set_union),对称差(set_s...转载 2020-03-16 11:26:25 · 2827 阅读 · 0 评论 -
【C++】map、unordered_map的基本操作与用法
一、头文件#include "map"#include "unordered_map"二、原理map内部是用红黑树(不严格平衡的二叉排序树)实现的,能够根据插入键值的不同进行自动排序,中序遍历该树即可得到从小到大递增的键值。unordered_map内部是用哈希表实现,通过特殊的函数把Key值映射到哈希表中的一个位置来访问记录,查找时间复杂度可达到O(1)。因此,map...原创 2020-03-13 23:15:39 · 1691 阅读 · 0 评论 -
【OpenGL C++ UE4】获取模型顶点及面索引数据,并优化存储结构供UE4绘制
目录一、功能需求二、成果三、环境配置四、详细步骤4.1Max制作三棱锥并处理4.2 核心代码4.2.1 传入结构体数据4.2.2 顶点去重、更新索引4.2.3 输出本地CSV文件一、功能需求想必你肯定会问我一个问题,UE4直接导入模型不好么?哈哈,前提是在做毕设时,导师提供的只有顶点与面索引数据,没有模型。下文详细介绍了毕设开发中的难点,涉及三...原创 2020-02-24 17:44:53 · 5503 阅读 · 0 评论 -
【C++】map与unordered_map的区别与使用
转自:https://blog.csdn.net/BillCYJ/article/details/78985895需要引入的头文件不同map: #include < map >unordered_map: #include < unordered_map >内部实现机理不同m...转载 2020-02-21 19:37:56 · 269 阅读 · 0 评论 -
【C++】使用FILE输出txt文件与fopen格式
//头文件:<stdlib.h> //方法: FILE *fp=fopen("*.txt","w"); fprintf(fp,"你要写入txt的内容"); fclose(fp); ///or //若没有这个.txt文件,则将自动建立一个 sprintf(temp,"C:/USER/data/%06d.txt", i );/////char temp[2...原创 2020-02-21 12:02:56 · 2288 阅读 · 0 评论 -
【Opengl C++】基于二叉树与叶子链表的二维矩形装箱算法
Github获取源码:https://github.com/ColorGalaxy/Bin-Paking-Algorithm基于二叉树与叶子链表算法思维对输入的矩形数据进行动态排版,缩进式树状打印与Opengl绘制显示排版结果。实现了将全部的矩形紧凑封装在一个近似正方形的空间中,提高了空间利用率,能达到90%以上,减少了内存资源的浪费。配置:简单的使用了Glut库进行Opengl绘制...原创 2020-02-21 00:15:49 · 2268 阅读 · 3 评论 -
【C++】批量修改路径下所有文件夹中的文件后缀名
可根据需求进行相应修改,实现各种需求的文件名更改#include <stdio.h>#include <iostream>#include <string>#include <string.h>#include <sstream>#include <io.h>using namespace std;voi...原创 2019-08-04 20:07:23 · 839 阅读 · 0 评论