C++
文章平均质量分 82
Chris·Bosh
感谢你的关注,希望认识更多大佬。研究生在读,水论文方向视觉动态SLAM(SLAM太难了感觉毕不了业了),希望动这方面的大佬能够多多指点。
博客作为本人的学习笔记,学习历程以及本人学习过程中遇到的问题和解决办法,希望能对大家有所帮助。
展开
-
C++:特殊类的设计、类型转化、IO流
使用cin进行标准输入即数据通过键盘输入到程序中,同时C++标准库还提供了cerr用来进行标准错误的输出,以及clog进行日志的输出,从上图可以看出,cout、cerr、clog是ostream类的三个不同的对象,因此这三个对象现在基本没有区别,只是应用场景不同。如果单例对象构造十分耗时或者占用很多资源,比如加载插件啊, 初始化网络连接啊,读取文件啊等等,而有可能该对象程序运行时不会用到,那么也要在程序一开始就进行初始化,就会导致程序启动时非常的缓慢。如果需要用cin,cout可用如下代码增加效率。原创 2024-07-29 15:21:11 · 564 阅读 · 0 评论 -
C++线程操作、异常、智能指针
它通过引用计数来管理资源的生命周期,引用计数的增加和减少是线程安全的,但资源本身的访问不是线程安全的。实际使用中很多公司都会自定义自己的异常体系进行规范的异常管理,因为一个项目中如果大家随意抛异常,那么外层的调用者基本就没办法玩了,所以实际中都会定义一套继承的规范体系。这样大家抛出的都是继承的派生类对象,捕获一个基类就可以了。3.C++中异常经常会导致资源泄漏的问题,比如在new和delete中抛出了异常,导致内存泄漏,在lock和unlock之间抛出了异常导致死锁,C++经常使用RAII来解决以上问题。原创 2024-07-20 10:42:15 · 1069 阅读 · 1 评论 -
C++11(1)
arg_list中的参数可能包含形如_n的名字,其中n是一个整数,这些参数是“占位符”,表示newCallable的参数,它们占据了传递给newCallable的参数的“位置”。①左值是一个表示数据的表达式(如变量名或解引用的指针),我们可以获取它的地址+可以对它赋值,左值可以出现赋值符号的左边,右值不能出现在赋值符号左边。①右值也是一个表示数据的表达式,如:字面常量、表达式返回值,函数返回值(这个不能是左值引用返回)等等,右值可以出现在赋值符号的右边,但是不能出现出现在赋值符号的左边,右值不能 取地址。原创 2024-06-19 15:29:09 · 805 阅读 · 0 评论 -
哈希表/哈希桶
①插入:根据待插入元素的关键码,以此函数计算出该元素的存储位置并按此位置进行存放。②搜索:对元素的关键码进行同样的计算,把求得的函数值当做元素的存储位置,在结构中按此位置取元素比较,若关键码相等,则搜索成功。该方式即为哈希(散列)方法,哈希方法中使用的转换函数称为哈希(散列)函数,构造出来的结构称为哈希表(Hash Table)(或者称散列表)该方式就和计数排序非常相似。原创 2024-05-24 16:40:02 · 339 阅读 · 0 评论 -
红黑树!!
红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以Red或Black。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。最长路径≤最短路径×2。原创 2024-05-14 10:18:08 · 417 阅读 · 0 评论 -
AVL树!
②左右子树高度之差(简称平衡因子)的绝对值不超过1(-1/0/1)如果一棵二叉搜索树是高度平衡的,它就是AVL树。①它的左右子树都是AVL树。原创 2024-05-13 10:04:25 · 198 阅读 · 0 评论 -
map和set
set就是key模型的搜索树map就是key_value模型的搜索树但是他们的底层不是搜索二叉树,是AVL树和红黑树!原创 2024-05-01 21:53:21 · 900 阅读 · 0 评论 -
两种类型的二叉搜索树
②KV模型:每一个关键码key,都有与之对应的值Value,即<Key, Value>的键值对。①K模型:K模型即只有key作为关键码,结构中只需要存储Key即可,关键码即为需要搜索到的值。比如英汉词典就是英文与中文的对应关系,通过英文可以快速找到与其对应的中文,英。再比如统计单词次数,统计成功后,给定单词就可快速找到其出现的次数,单词与其出。①若它的左子树不为空,则左子树上所有节点的值都小于根节点的值。②若它的右子树不为空,则右子树上所有节点的值都大于根节点的值。③它的左右子树也分别为二叉搜索树。原创 2024-04-29 14:54:10 · 289 阅读 · 0 评论 -
C++多态
总结一下派生类的虚表生成:a.先将基类中的虚表内容拷贝一份到派生类虚表中b.如果派生类重写了基类中某个虚函数,用派生类自己的虚函数覆盖虚表中基类的虚函数c.派生类自己新增加的虚函数按其在派生类中的声明次序增加到派生类虚表的最后。原创 2024-04-23 11:57:53 · 846 阅读 · 0 评论 -
C++继承
继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承一定程度破坏了基类的封装,基类的改变,对派生类有很大的影响。类之间的关系可以用继承,可以用组合,就用组合。基类的其他 成员在子类的访问方式 == Min(成员在基类的访问限定符,继承方式),public > protected> private。这里的不可见是指基类的私有成员还是被继承到了派生类对象中,但是语法上限制派生类对象不管在类里面还是类外面都不能去访问它。原创 2024-04-19 15:17:26 · 707 阅读 · 0 评论 -
C++模板进阶
所以也就是说,知识具有滞后性。学到后面才知道前面为啥要那么做。前面还不知道这个的时候,写STL的底层可把我折磨坏了!原创 2024-04-15 12:13:06 · 360 阅读 · 0 评论 -
反向迭代器的底层
因此,只要你有一个满足上述条件的迭代器,这个适配器就可以适配你的容器。比如,你可以将这个适配器用于std::vector、std::list等STL容器的迭代器,甚至可以用于你自己实现的容器的迭代器(只要满足上述条件)。容器类名::const_reverse_iterator 迭代器名;②Ref:表示返回值的引用类型,通常是迭代器指向元素的引用类型。③Ptr:表示返回值的指针类型,通常是迭代器指向元素的指针类型。①Iterator:表示要适配的容器的迭代器类型。容器类名::iterator 迭代器名;原创 2024-04-14 18:15:16 · 352 阅读 · 0 评论 -
C++STL(stack类、queue类)
stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元素,另一端提取元素。原创 2024-04-13 19:25:58 · 836 阅读 · 0 评论 -
C++STL(list类)
list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。原创 2024-04-08 14:52:40 · 362 阅读 · 0 评论 -
C++STL(vector类)
首先vector是什么呢?vector就是顺序表1. vector是表示可变大小数组的序列容器。2. 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素 进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自 动处理。原创 2024-04-02 10:58:59 · 1396 阅读 · 0 评论 -
C++STL(string类)
废话少说,不那么繁琐的介绍了!就是跟字符有关!在使用string类时,必须包含#include头文件以及using namespace std;string是表示字符串的字符串类该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。string在底层实际是:basic_string模板类的别名,typedef basic_string<char, char_traits, allocator>string;不能操作多字节或者变长字符的序列。原创 2024-03-09 17:54:06 · 418 阅读 · 0 评论 -
C++模板、模板引入STL
STL只是C++标准库的一部分,STL主要包括数据结构和算法!为什么要和模板放在一起呢?因为STL就像一个模板,有了STL我们就不需要自己受挫链表、栈、堆等了!!原创 2024-02-23 15:16:47 · 400 阅读 · 0 评论 -
C++内存管理
operator new 和operator delete是系统提供的全局函数,new在底层调用operator new全局函数来申请空间,delete在底层通过operator delete全局函数来释放空间。指程序使用系统分配的资源,比方套接字、文件描述符、管道等没有使用对应的函数释放掉,导致系统资源的浪费,严重可导致系统效能减少,系统执行不稳定。长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现内存泄漏会导致响应越来越慢,最终卡死。//字符串“abcd”的长度,不包括\0的长度。原创 2024-02-03 12:17:17 · 1043 阅读 · 1 评论 -
C++类和对象知识点集合
首先,我们要知道空的类也是有大小的!!原创 2024-02-02 12:38:21 · 761 阅读 · 0 评论 -
C++基础语法和用法
inline是一种以空间(编译好的可执行程序)换时间的做法,如果编译器将函数当成内联函数处理,在编译阶段,会用函数体替换函数调用,缺陷:可能会使目标文件变大,优势:少了调用开销,提高程序运行效率。原创 2024-01-24 16:08:43 · 963 阅读 · 0 评论