何海涛读书笔记_木笛的读书笔记
何海涛读书笔记由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“木笛的读书笔记”。
何海涛字符串的排列
30赋值运算符重载
CMyString& CMyString::operator =(const CMyString &str)
是否把返回值的类型声明为该类型的引用,并在函数结束前返回实例自身(即*this)的引用?只有返回一个引用,才可以允许连续赋值。
是否把传入的参数的类型声明为常量引用?如果传入的参数不是引用而是实例,那么从形参到实参会调用一次构造拷贝函数。把参数申明为引用可以避免这样的无谓消耗,能提高代码的效率。同时,我们在赋值运算符函数内是不会改变传入的实例的状态的,因此应该为传入的引用参数加上const关键字。
是否记得释放实例自身已有的内存?如果忘了在分配新内存之前释放自身已有的空间,将出现内存泄露。
是否判断传入的参数是不是和当前的实例(*this)是不是同一个实例?如果是同一个,则不进行赋值操作,直接返回。如果事先不判断,就进行赋值,那么在释放实例自身的内存的时候就会导致严重的问题:当*this和传入的参数是同一个实例时,那么一旦释放了自身的内存,传入的参数的内存也同时被释放了,因此再也找不到需要赋值的内容了。
不能被继承的类
将构造函数设置成私有的;(实现一个公有的成员函数用于产生对象或者设置一个友元函数)34 数组中只出现一次的数字
若只有1个数字出现一次则将所有数抑或,最终得到的就是所求。
若有2个数字出现1次,则将数字分成两组,每组抑或分别得到两个数字。
在字符串中删除特定的字符
采用快慢指针来删除;采用hashtable来查询;
void deleteChar(char *resChar, char *deleteChar)
{
}
if(resChar==NULL||deleteChar==NULL)return;const int size = 256;//定义哈希表 int hashTable[size] = {0};char *pTemp = deleteChar;while(*pTemp!= ' ')//初始化哈希表hashTable[*pTemp++] = 1;char *pSlow,*pFast;pSlow = pFast = resChar;while(*pFast!= ' ')//删除要删除的字符 {} if(hashTable[*pFast]==1)pFast++;else*pSlow++ = *pFast++;*pSlow = ' ';//最后设置结束符
寻找丑数
int GetUglyNumber(int index)
{
if(index
return 0;
int *pUglyNumbers = new int[index];
pUglyNumbers[0] = 1;
int nextUglyIndex = 1;
//标志乘以2,3,5的标界
int *pMultiply2 = pUglyNumbers;
int *pMultiply3 = pUglyNumbers;
int *pMultiply5 = pUglyNumbers;
while(nextUglyIndex
{
int min = Min(*pMultiply2 * 2, *pMultiply3 * 3, *pMultiply5 * 5);
pUglyNumbers[nextUglyIndex] = min;
while(*pMultiply2 * 2
++pMultiply2;
while(*pMultiply3 * 3
++pMultiply3;
while(*pMultiply5 * 5
++pMultiply5;
++nextUglyIndex;
}
int ugly = pUglyNumbers[nextUglyIndexnumber[1];
for(int i = 2;i
{
if(number[i1];//i-1之前的最大数int currentDiff = max-number[i];//diff[i]if(currentDiff > maxDiff)
maxDiff = currentDiff;
}
return maxDiff;}
T(n)=2T(n/2)+O(n)= nlgn
T(n)=2T(n/2)+O(1)= n
T(n)=aT(n/b)+f(1)用nlgba与f n 比较