C++基础入门 引用做一个别名,相当于重新定义一个符号,这个符号和引用实体共享操控同一块空间这里a和b操控同一块内存空间,对b的操作也就是对a的操作比如说在语法上来说,引用是不占用空间的,但是底层也是指针,由编译器进行转换。
Linux进程控制 options:options默认为0,表示阻塞式的等待,但是如果想在等待期间做一些其他事情的话,就要更改options参数为WNOHANG(wait no hang),这也是一个宏. 如果使用非阻塞的调用方式,那么需要多次调用访问子进程是否退出。通过fork创建出来的子进程和父进程是共享某一段代码的,但是如果子进程如果想要拥有全新的属于自己的一段代码该怎么办呢?要说是系统真正提供给我们的调用接口,还得是execve,上面的函数底层调用的全部都是execve接口,是系统做的基本封装。(查看进程的退出码)
C++多态十问 构造函数可以是虚函数吗?答:不能,因为对象中的虚函数表指针是在构造函数初始化列表。析构函数可以是虚函数吗?什么场景下析构函数是虚函数?对象访问普通函数快还是虚函数更快?答:首先如果是普通对象,是一样快的。对象或者是引用对象,则调用的普通函数快,因为构成多态,运行时调用虚函数需要到虚函。虚函数表是在什么阶段生成的,存在哪的?答:虚函数表是在编译阶段就生成的,一般情况。的调用方式无法访问虚函数表,所以静态成员函数无法放进虚函数表。静态成员可以是虚函数吗?答:不能,因为静态成员函数没有。函数可以是虚函数吗?
C++中为什么推荐要把基类析构函数设置成虚函数 在C++中常听老师讲要把基类析构函数声明成虚函数,这是因为要防止使用基类指针在调用派生类对象析构函数时,触发静态绑定,调用不到派生类的析构函数,导致内存泄漏。在这里如果没有把基类析构函数声明成虚函数,那么就没有构成多态,那么编译器只会去调用Base的析构函数而非Derive。
C++基础知识剖析第一弹 在编程中时常会出现重名的现象,所以C++设计了namspace来避免这个问题。namespace将全局作用域分成几部分作用域,因为在不同的作用域中允许存在同名变量,所以使用namespce可以防止同名变量冲突。
C++实现STL_List 接下来实现List类,List类主要是完成对节点的操作,比如说链接前后节点,给链表插入数据,控制迭代器等等,List的数据成员设计成一个指向节点的指针,和STL保持一致。我们这里实现的链表是带哨兵位的双向循环链表,所以构造函数需要创建一个哨兵位节点,让。链表节点包含前驱指针和后驱指针,同时把构造函数写好,构造函数只需要为节点中的数据成员赋值,并将前驱节点和后驱节点置成空即可。这时候的链表还只是一个空架子,只有一个哨兵位,其他啥都没有,所以我们像插入数据,就实现一个简单的尾插函数。
Typora免费版下载安装(小白必看) 找了好多网盘上的Typora下载后打开要么提示过期,要么说现在只是试用,去网上求解但是呢大佬们的解决方法又不是特别懂。需要的同学可以加我qq1767703633。我发给你哇,如果可以的话就点个赞收藏一下呗。于是找老师要了一个安装包,发现可以通过。...
排序入门—插入排序和希尔排序 依然拿上述数组(排成升序)举例这个数组中的1就是我们抓的第一张牌,显而易见的是第一张牌不用排序,我们接着抓牌,抓到第二张牌是3,抓到后与1进行比较,3不比1小则排在后面,接着抓到9,9不比3小,排在后面,抓最后一张牌是3,3比9小则要进行比较我们先拨开9这张牌,看到9的前面排着一个3,3不比3小,所以后面的这张3就放在前面那张3的后面,9的前面,那么抓牌就完毕了。可以看看动图来理解一下过程。对于插入排序,当序列本身比较有序时,这种排序的效率还是挺高的,但是如果处理的序列非常无序,时间效率则会极其低下。...
数据结构中的堆排序算法 如果子节点比父节点大,那么则停止这个过程(因为原本的数组就是一个堆,是满足堆的性质的,如果这个数据比其父节点大,那么一定比它的祖先大,所以不用再进行调整),这就是向上调整算法。向上调整算法是由插入数据引出的,而向下调整则是由删除数据引出的。以这课二叉树为例解释一下向上调整算法,此时的child是最后一个节点10,父节点是28(根据子节点和父节点的关系计算,可以看上一篇文章),28比10大,因为是小堆所以要交换二者的值,并将原来28的位置(即parent)赋给原来10的位置(即child)。......
二叉树—堆 在插入数据到堆中时要注意插入元素是否会使得堆不再为堆(因为堆的性质是父节点要大于或小于子节点),所以在插入数据之后需要向上检索其父节点是否不满足当前堆的性质,如果是则交换父子数据,接着循环,直至满足为止。二叉树也可以选择链表和数组表示,当二叉树是完全二叉树或者满二叉树时,用数组表示更优,因为用数组找寻子节点不需要指针,仅需要数组下标即可,详情请查看上篇文章,附上传送门。堆顶元素的删除并不是简单将数组元素整体往前挪动一位那么简单,如果仅仅是挪动,那么会破坏堆结构,父子间的关系可能会改变。......
交换二进制位中的奇偶位 提取奇数位按位与上01010101010101010101010101010101(二进制)------0x55555555(十六进制)提取偶数位按位与上10101010101010101010101010101010(二进制)------0xaaaaaaaa(十六进制)然后奇数位左移一位,这时候奇数位就变成了偶数位,偶数位右移1位变成奇数位,再将他们按位或就交换完毕。这题涉及到位运算,要交换奇数偶数位,可以先把奇数偶数位提取出来。...
交换二进制位中的奇偶位 提取奇数位按位与上01010101010101010101010101010101(二进制)------0x55555555(十六进制)提取偶数位按位与上10101010101010101010101010101010(二进制)------0xaaaaaaaa(十六进制)然后奇数位左移一位,这时候奇数位就变成了偶数位,偶数位右移1位变成奇数位,再将他们按位或就交换完毕。这题涉及到位运算,要交换奇数偶数位,可以先把奇数偶数位提取出来。...