首页 > 其他 > 详细

《剑指Offer》题一~题十

时间:2018-08-22 23:57:01      阅读:212      评论:0      收藏:0      [点我收藏+]

一、赋值运算符函数

题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数。

class CMyString {
public:
	CMyString(char *pData = nullptr);
	CMyString(const CMyString &str);
	~CMyString();
private:
	char *m_pData;
}; 

测试用例:

  • 把一个CMyString的实例赋值给另外一个实例。
  • 把一个CMyString的实例赋值给它自己。
  • 连续赋值。

没有考虑异常安全性的解法:

CMyString& CMyString::operator=(const CMyString &rhs)
{
	if(this != &rhs) 
	{
		delete []m_pData;
		m_pData = nullptr;
		m_pData = new char[strlen(rhs.m_pData) + 1];
		strcpy(m_pData, rhs.m_pData);
	} 
	return *this;
}

考虑异常安全性的解法:

CMyString& CMyString::operator=(const CMyString &rhs)
{
	if(this != &rhs)
	{ 
		CMyString strTemp(rhs);			// 创建一个临时实例strTemp 
		/* 交换strTemp.m_pData和实例自身的m_pData */ 
		char *pTemp = m_pData;			
		m_pData = strTemp.m_pData;
		strTemp.m_pData = pTemp;
	}   /* 自动调用strTemp的析构函数,释放strTemp.m_pData指向的新内存 */
	return *this;
}

补:在新的代码中,我们在CMyString的构造函数里用new分配内存,故如果内存不足将抛出诸如bad_alloc等异常,但由于我们还没有修改实例自身的状态,故实例的状态还是有效的,这也就保证了异常安全性。

考点:

  • C++基础语法,如运算符函数、常量引用等。
  • 内存泄露。
  • 代码异常安全性。

 

二、实现Singleton(单例)模式

题目:设计一个类,我们只能生成该类的一个实例。

解读题意:只能生成一个实例的类是实现了Singleton模式的类型。

考点:

  • 单例模式
  • C#基础语法,如静态构造函数等。
  • 多线程编程。

 

三、数组中重复的数字

题目一:找出数组中重复的数字。

在一个长度为n的数组里的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。

 

题目二:不修改数组找出重复的数字。

在一个长度为n+1的数组里的所有数字都在1~n的范围内,所以数组中至少有一个数字是重复的。请找出数组中任意一个重复的数字,但不能修改输入的数组。例如,如果输入长度为8的数组{2,3,5,4,3,2,6,7},那么对应的输出是重复的数字2或者3。

 

四、在二维数组中的查找

题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

  

  

 

《剑指Offer》题一~题十

原文:https://www.cnblogs.com/xzxl/p/9521032.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!