
C++
杰读源码
这个作者很懒,什么都没留下…
展开
-
面试题1:复制运算符
这道题考察了赋值运算符函数,考虑四点:1:返回值类型为引用类型;2:传入参数声明为常量引用,这样做的好处是避免无谓消耗:如果参数不是引用而是实例,那么从形参到实参会调用一次复制构造函数,降低了代码效率;3:给实例分配新内存之前,要释放实例自身占据的内存,否则将造成内存泄露;4:要考虑传入的参数和*this是否是同一个实例。代码如下:#include<iostream>#include...原创 2018-03-01 16:49:09 · 341 阅读 · 0 评论 -
面试题3:二维数组中查找某值
一个从左到右,从上到下依次递增的数值的二维数组,设计一个算法找出值A。思路:以二维数组的右上角的为突破点(设值为B),如果A大于B,则可以消掉最上面那行,反之,可以消掉最右边那列。循环可找到那个值(当然如果二维数组中有那个值的话)。程序如下:#include<iostream>using namespace std;bool Find(int* matrix,int rows,in...原创 2018-03-01 20:40:15 · 246 阅读 · 0 评论 -
面试题4:替换空格
将一个字符串里的空格替换成%20。常规思路:从前往后移动字符串,遇到空格将其替换,问题是每遇到一次,空格后面的字符串就要被移动一次,假设字符串长度是n,时间效率是O(n的平方);正确思路:从后往前移动字符串,计算出替换过后字符串的位置,准备两个指针P1和P2,P1指向原始字符串的末尾,P2指向替换后字符串的末尾,然后将P1指向的字符复制到P2指向的位置,复制完成后两个指针向前,直到P1遇到空格,P...原创 2018-03-02 13:54:14 · 140 阅读 · 0 评论 -
单向链表末尾插入一个节点(指向指针的指针该怎样理解)
程序如下:#include<iostream>using namespace std;struct ListNode{ int value; ListNode* m_pNext;};void AddToTail(ListNode** pHead,int value){ ListNode* newNode=new ListNode(); newNode->val...原创 2018-03-02 21:54:48 · 5977 阅读 · 1 评论 -
面试题5:从从尾到头打印链表
两个思路:1:利用栈“先进后出,后进先出”的原则,把链表从头到尾放进去,然后就可以从尾到头取出来;2:利用递归函数轻松完成。代码如下:struct ListNode{ int value; ListNode* m_pNext;};//利用栈void ReverseStack(ListNode* pHead){ ListNode* pNode=pHead; stack<Lis...原创 2018-03-03 21:57:02 · 158 阅读 · 0 评论 -
C++菜鸟记
项目多也没用,关键还是要刷题,手写算法不是开玩笑的。。所以决定老老实实开始刷题,把基础打好。1:static修饰的变量在类外初始化,const修饰的在参数列表初始化,在构造函数中需要列表初始化的有如下三种: 带有const修饰的类成员,如const int a; 引用成员数据,如int &p; 带有引用的类变量2:大端模式:数据低位放在内存高位; ...原创 2018-04-10 19:39:28 · 481 阅读 · 0 评论 -
一些关于数组和指针的想法
指针是C的难点和精华,当他和数组相遇时,如果没有好好理清它们之间的关系和原理,那真是搞不清理还乱了。1:二维数组a代表什么含义?首先定义了一个二维数组a,当然我们必须把a看成一个一维数组,它有两个“大”(行)元素,每个“大”(行)元素都由五个“小”(列)元素,这是我们理解数组的前提条件。a是一个数组,它的数组名a代表了其首元素的地址,这里就是第一行的地址,它的类型是什么呢?答:指向由int小元素组...原创 2018-05-15 15:33:23 · 177 阅读 · 0 评论 -
对C++虚函数与多态的理解
派生类对象可以替代基类对向基类对象的引用初始化或赋值,此时该引用并不是派生类对象的别名,只是派生类对象中基类部分的别名,因此该引用只能访问基类中的成员,可以理解为将派生类对象转换为基类对象了.#include <iostream>using namespace std;class Father{public: Father() {} void displa...原创 2018-06-11 10:31:40 · 396 阅读 · 0 评论