随笔分类 - C++
Talk is cheap, show me the code!
    
摘要:一、常用排序算法及滑稽实现 1. 插入排序:遍历数组(n),将每个元素插入到前面子序列的合适位置(插入时采取前面的部分元素后移,再将本元素填在适当位置的方法) 平均:O(n2) 最坏:O(n2) 最好:O(n)(有序时出现) 稳定性:稳定(相同元素在排序之后相对位置不会改变) 模拟: 12 30 9
        阅读全文
                
摘要:摘录一些C++面试常考问题,写一些自己的理解,花了挺长时间的,作图是真的累,欢迎来摘果子。 static关键字 用于声明静态对象; 静态函数只在本文件可见。(默认是extern的) 全局静态对象:全局静态对象,存储在全局/静态区,作用域整个程序,在程序结束才销毁; 局部静态对象:在函数内部加上sta
        阅读全文
                
摘要:虚表vftable,编译器为每个拥有虚函数的类都建有一张虚函数表,里面存有虚函数的入口指针(地址)。在类对象的内存布局中,先是一个vfptr虚表指针,指向虚表首地址,而后通过偏移量的形式来访问虚表中的地址。 看许多文章都在那里侃侃而谈,然能实际展示类(对象)内存布局者寥寥,不可见内里实现的终究是借他
        阅读全文
                
摘要:在我看来,看源码是一件既痛苦又兴奋的事。当我们在推敲其中的难点时,是及其痛苦的,但当发现实现代码是那么丝滑简洁时,“wc, nb!”。 1. 导语 如果我们去看关联式容器map、set、multimap、multiset源代码,我们发现绝大部分操作如插入、修改、删除、搜索,均是由其内含的红黑树来完成
        阅读全文
                
摘要:多态 C++的封装、继承和多态三大特性,封装没什么好说的,就是把事务属性和操作抽象成为类,在用类去实例化对象,从而对象可以使用操作/管理使用它的属性。 至于继承,和多态密不可分。基类可以进行派生,而派生类则是继承基类或称父类,把基类中属性和方法拿过来,变成自己的一部分,其中需要较为精细的思考。 多态
        阅读全文
                
摘要:说起函数重载,我不由得想起了C++的“多态”特性。多态又分为静态(编译时)多态和动态(运行时)多态,静态多态即为函数重载,动态多态则是虚函数机制。虚函数水较深,先不讨论,今天我们来看一下函数重载、作用以及要避免的一些坑(尤其是二义性错误)。 一、先来review一下 函数重载的概念 1. 函数名相同
        阅读全文
                
摘要:读完C++ primary 容器相关章节,有必要总结一下容器的要点,一图说明。 其中的问题,以下是我的一些想法,欢迎交流。 问题1. STL源码剖析 · vector 问题2. STL源码剖析 · RB-tree 问题3:unordered_map桶增长规律 问题4: #include<iostre
        阅读全文
                
摘要:无序容器unordered_map存储为一组桶,各元素通过hash函数映射到各个桶中。心血来潮,来看一下桶的增长规律。 测试环境:Windows vscode 编译器 GCC,不同的平台和编译器结果应该会有不同! 1 #include <iostream> 2 #include <string> 3
        阅读全文
                
摘要:给定string,利用泛型函数equal,判断回文串。 equal(第一个序列首元素,第一个序列尾元素, 第二个序列首元素) 借助了迭代器和反向迭代器。
        阅读全文
                
摘要:数制转换 nums to string std::to_string(type num) string to nums std::stoX stod, stof, stol, soll... 实例 (也可到这里自行运行)
        阅读全文
                
摘要:关于类的一些遗漏的点。 总结: 1. 友元函数和友元类:在类内部声明友元(在该函数/类前加上friend即可),友元可以访问非公有成员在内的所有成员; 2. mutable 关键字,界限突破。声明mutable 变量,该变量一直处于可改变状态,就算在const函数内,照该不误; 3. 默认生成构造函
        阅读全文
                
摘要:1. 表达式只计算,抛弃计算结果; 2. 空语句什么也不做; 3.switch case语句漏写break,将会从匹配到的情况开始执行,直到语句结束 4. 形参、实参、局部变量、静态局部变量 所谓形参就是占位之用,在函数开始时申请空间,并由传入实参进行实例化(也可称拷贝构造)。一般是局部的,即只能在
        阅读全文
                
摘要:类型转换 隐式类型转换 显式类型转换 【1】隐式类型转换 有些类型转换是自动进行的,不需要人为的介入,比如算术运算时发生的类型转换(int i = 1.0 + 2,double->int),我们称之为隐式的。 其中场景大概会分为 左值到右值 整型提升 表达式提升 数组到指针 右值到左值 指针与指针 
        阅读全文
                
摘要:我们知道struct是C语言的宠儿,当需要一个复杂类型的时候就需要定义一个struct 比如一个学生结构体,含有三个属性,分别是编号、名字和年龄。 当我们用一个链表将他们存起来,即指针指向struct,然后便可以对所有学生进行查看、删除、修改和增加,这不就是你曾经做过的简单学生管理系统吗?😄 你甚
        阅读全文
                
摘要:偶然看到群里老哥问道这个问题 什么?char 还可以赋值字符串的?单引号还可以容纳如此多的字符? 结果 输出 . 就是点 换成其他的如:1.23,输出3 我找汇编看了一下 再结合一下汇编中的大端存大值来看的确是这样。 在内存中,上面字符串中1.28 实际上 8是在低地址端,用byte去取的时候先取到
        阅读全文
                
摘要:所谓模板,就是模板,但与我们所熟知的模子不同,模板用于生成不同的东西(函数或者类)。在C++中有函数模板和类模板。今天我们来探讨一下函数模板。 场景:我们需要一个函数来做加法运算又或者我们需要自己实现print函数,那怎么处理传入参数不同(double ? int ? char ? short ? 
        阅读全文
                
摘要:C++11 auto & decltype auto:根据变量初始值来推导变量类型,并用右值初始化变量。 decltype:从表达式推导出类型,并将变量定义为该类型,但不用表达式的值初始化该变量。 这里要注意下:decltype(i)--是i的类型,而decltype((i))就是引用了。就像上面例
        阅读全文
                
摘要:STL(Standard Template Library) 我们使用库函数非常方便,且非常高效(相对于自己实现来说)。那如此好用的模板库它的内里是什么样的?它背着我们施展了什么“魔法”呢?我决定一探究竟,相信你也是一样。我会选用部分重要代码做分析,用来提升自己,希望后来的你在我的拙见中也能有自己的
        阅读全文
                
摘要:std::weak_ptr 避免shared_ptr内存泄漏的利器。👈 smart pointer 三兄弟性格各异。unque_ptr是独来独往,shared_ptr是左拥右抱,而weak_ptr生来就不是为了单打独斗,了解之后你会发现他总是和shared_ptr出双入对。 既然shared_pt
        阅读全文
                
摘要:std::unique_ptr 1.特性 1) 任意时刻unique_ptr只能指向某一个对象,指针销毁时,指向的对象也会被删除(通过内置删除器,通过调用析构函数实现删除对象) 2)禁止拷贝和赋值(底层实现拷贝构造函数和复制构造函数 = delete),可以使用std::move()、unique_
        阅读全文
                

 浙公网安备 33010602011771号
浙公网安备 33010602011771号