- 博客(14)
- 收藏
- 关注
原创 vector中 emplace使用中出现的bug
第一个点:使用默认构造函数初始化的vector的size和capacity是0,第二个点:当size达到capacity的时候,capacity的扩增倍数是1.5倍。 写代码的过程中,使用emplace的时候出现了一个bug,个人感觉这个bug有记录的价值,关联到vector内部的扩容等机制,于是做了一个小demo来验证这个bug,直接上代码把,代码写的很随意,大佬勿喷。 这边的话是定义了一个push函数,调用emplace函数,然后返回插入位置的迭代器,本意是记录新的迭代器的位置。
2024-07-14 16:03:15 390
原创 C++中四种强制类型转换的方式
下行转换又分两种情况,一种是基类指针指向派生类型,然后进行转换,这种转换是安全的,第二种情况是基类指针指向基类类型,这种转换就需要进行动态运行检查,转换失败,会返回NULL。(2)指针转换成整形,但是要注意转换的时候一定要转换到足够长的整形类型中,指针在16、32、64位操作系统下大小分别为2、4、8字节,所以在转换的时候至少要转换到对应大小的整形。(2)将指向派生类的指针转换为基类的指针,也就是上行转换,编译器会在编译的时候检查这个派生类是否是基类的子类,所以转换的过程是安全的。(3)整形转换为指针。
2024-04-25 14:12:27 969
原创 ubuntu 安装mysql缺少libaio.so.1文件解决办法
sudo apt install libaio1即可,包的名字叫libaio1不是libaio,太坑爹了。
2024-04-18 23:34:06 1097 1
原创 Windows下批量修改.cc文件到.cpp文件
最近想看看sylar框架的源码,结果发现git clone下来是.cc文件,没法导入source insight软件,所以需要一种批量修改文件格式名的方式。4、点击后,当前目录下的.cc文件就会全部改成.cpp文件。3、保存后改变ren.txt的后缀名为ren.bat。2、文件内输入ren *.cpp *.cc。1、新建一个ren.txt文件。
2024-04-14 17:58:10 230 1
原创 IO多路复用
多路:多个socket网络连接复用:使用一个线程来检查多个文件描述符的就绪状态三种多路复用技术:select、poll、epoll。
2024-03-17 17:52:02 1243 1
原创 AVL、红黑树
由于AVL的平衡条件,导致插入节点或者删除节点的时候,会导致树失衡,所以需要进行平衡操作,平衡操作有左旋和右旋两种操作。将父亲和叔叔设置为黑色,将X和X的爷爷标记为相同的颜色,然后接着查看爷爷节点父节点和叔叔的情况,若为根节点,则标记为黑色。第五个特性,决定了红黑树的平衡特性,其平衡特性与AVL的平衡特性不同,红黑树的平衡取决于。红黑树为空树:插入节点,根据特性2,新插入的节点是根节点,所以需要把节点的颜色变成黑色。插入节点的父节点为黑色:由于插入的节点是红色的,所以不会影响红黑树的平衡,直接插入就行。
2024-03-16 19:50:05 904 1
原创 Linux下访问DNS服务
CNAME www.a.shifen.com., A 120.232.145.144, A 120.232.145.185”表示3个应答资源记录的内容,其中CNAME紧随其后记录的是机器的别名,A表示紧随其后的记录是IP地址。“表示使用A类型的查询方式,”www.baidu.com"则是DNS查询问题中的查询名,括号中的数值31则是DNS查询报文的长度。 输出告诉我们,机器名www.baidu.com是www.a.shifen.com的别名,并且该机器名对应两个IP地址。
2023-07-16 13:50:49 1296 1
原创 打印斐波那契数列(C++代码实现)
题目来源:力扣写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。
2023-06-17 16:03:57 763 1
原创 安装vim时显示sudo:apt-get:command not found
使用的是Centos,Centos安装软件基于yum,ubuntu基于apt-get,将sudo apt-get install vim改成sudo yum install vim 即可。
2023-05-31 19:46:01 1094 1
原创 图像阈值分割——最大熵阈值分割
对于只有两个峰值的直方图,可以将阈值取在两个峰值之间的谷,而对于具有多个峰值的,可以考虑将多个峰值的直方图转换成只有两个峰值的直方图。假定一个阈值s进行分割,分割之后的图像有两个层次,分别用黑色(b)和白色(w)表示。为了求得后验熵的最大值,需要用S阈值来表示后验熵,然后对后验熵以S为未知数进行求导,求得使得后验熵为最大值的S,即为最终所要取的阈值。最大熵阈值分割就是要找到某个阈值使得分割出来之后的图片的信息量最大,图片中的信息量的定义如下。α为Hw与H的比值,将求后验熵的最大值转化为求F(α)的最大值。
2023-05-24 13:56:35 520
原创 vector内部扩容机制
最后回到算法本身,虽然两种方式看上去的复杂度都是O(n),但是本质上第二种方式,进行了非常多次的底层拷贝,其算法复杂度为O(n+t*n),t是底层拷贝的次数,因此之后若能提前确定vector大小,可以不让它进行动态扩容,节省更多的时间。在vector中,插入元素的方式用的比较多的有push_back和insert,因为开头的函数中,我们使用的是push_back,因此这里只讲讲push_back的背后发生了什么。知晓了vector的基础属性的源码后,再看看vector初始化的5种方式。
2023-04-13 15:59:14 151 1
原创 STM32 基本定时器实验
时钟源时钟挂载在APB1总线下,中间有一个倍频器,sys_stm32_clock_init时钟已经设置APB1总线时钟频率为36M,预分频器分频系数为2,所以挂载在APB1总线的定时器时钟频率为72Mhz,图中对应的时钟信号为CK_INT。控制器能够控制定时器复位、使能、计数,还能触发DAC转换。时基单元时基单元包括:计数器寄存器、预分频寄存器、自动重载寄存器。预分频寄存器的输入来源于CK_PSC,也就是CK_INT,输出为CK_CNT,CK_CNT是通过预分频器分频后的信号。
2023-04-12 09:49:51 805
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人