首页 > 代码库 > Happy剑指offer:第2章题目笔记
Happy剑指offer:第2章题目笔记
判断题1
涉及到的一个问题是类内赋值构造函数的传值问题。如果允许复制构造函数传值,就会在赋值构造函数内部递归一般的进行对复制构造函数的调用,最终必然导致栈溢出。
如果仔细观察就会发现,如果要是调用复制构造函数,赋值构造函数的输入参数必然是引用形式。
举例;
A(const A &other)
面试题1
自己在定义一个类的时候,对构造函数,仍然会有一点点的不确定。
尝试了一把运算符重载。感觉还好,注意的是
1. 输入为引用,输出为引用
2. 对于指针,注意分配内存和释放内存。
//offer1class CMyString{public: CMyString(char* pData = http://www.mamicode.com/NULL);//这个应该只能算是声明吧 CMyString(const CMyString& str); ~CMyString(void); CMyString& operator =(const CMyString &str);private: char* m_pData;};CMyString& CMyString::operator = (const CMyString &str){ if (this == &str) return *this; delete[]m_pData; m_pData == NULL; m_pData = new char[strlen(str.m_pData) + 1]; strcpy(m_pData, str.m_pData); return *this;}
面试题2
singleton模式:即单例模式。数学与逻辑学中,singleton定义为“有且仅有一个元素的集合”
如果一个类和singleton模式相关联,那么毫无疑问,这是一个特殊类,因为这种类只有一个对象,所以称为单例,单个例子嘛。一般这种单例非常容易被外界访问。
优点:节约系统资源。
生成实例的方法是静态方法。
//offer2 实现singleton模式class Singleton{public: static Singleton& GetInstance() { static Singleton Instance; return Instance; }private: Singleton(); Singleton(const Singleton& other); ~Singleton(); Singleton& operator=(const Singleton& other);};
面试题3
注意int* matrix只能是代表一维数组。思路知道之后这道题突然间变得好简单。
//offer3bool Find(int* matrix, int rows, int columns, int number){ bool IsFound = false; if (matrix != NULL && rows > 0 && columns > 0) { int row = rows-1; int column = 0; while (row >= 0 && column < columns) { if (matrix[row*columns + column] == number) { IsFound = true; break; } else { if (matrix[row*columns + column] < number) { ++column; } else { --row; } } } } return IsFound;}
判断题2:
两个字符串均定义为char str[]类型的时候,判断两个字符串是否相等,需要判定两个是不是指向相同的内存空间。这个问题十分重要。并非内容一样就可以的。另一种:char* str就不存在这个问题。它们定义的时候会自动指向对应的内存地址的。
Happy剑指offer:第2章题目笔记
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。