- 赋值运算符函数(P24)(面试题一)
- 数组和指针的区别(P37)& VS输出double会自动四舍五入
- 二维数组中的查找(P38)(面试题三)
这几个题比较简单,没什么好说,就只贴注意点和代码吧
1.赋值运算符函数(P24)(面试题1)
题目:如下类型CMyString的声明,请为该类型添加赋值运算符函数
注意点如下:
- 返回一个引用,才能连续赋值str1=str2=str3
- 传入参数类型声明为常量引用,既是为了避免调用复制构造函数,又是为了避免改变参数
- 判断传入参数和当前实例(*this)是不是同一个实例,避免释放自身
- 【创建临时实例,交换临时实例和原来的实例】或【先释放空间再new】前者符合异常安全性原则,避免先delete后new分配空间异常使CMyString实例不再保持有效状态
- 出if后,会自动调用析构函数释放临时实例,但指针却无法自动释放
class CMyString
{
public:
CMyString(char* pData = NULL);
CMyString(const CMyString& str);
~CMyString();
CMyString& operator =(const CMyString&);
private:
char* m_pData;
};
CMyString& CMyString::operator=(const CMyString& str)
{
//if(this != &str) //写法二
//{
// //先释放空间,避免内存泄露
// delete []m_pData;
// m_pData=NULL;
// //再申请空间,strlen返回字符长度,不包括结束符\0
// m_pData=new char[strlen(str.m_pData)+1];
// strcpy(m_pData,str.m_pData);
//}
if(this != &str) //避免将自身空间释放
{
//构造出一个新对象,在出if后会自动释放,相当于自动new+delete
CMyString istrTemp(str);
//交换空间
char *cpTemp=istrTemp.m_pData;
istrTemp.m_pData=m_pData;//要释放的空间
m_pData=cpTemp; //要赋值的空间
}
return *this;
}
测试用例:
- 把一个CMyString实例赋值给另一个实例
- 把一个CMyString实例赋值给自己
- 连续赋值
#include<iostream>
using namespace std;
int GetSize(int data[])
{return sizeof(data);}//以字节为单位,1字节=8bit}
int main()
{
//data1是数组,求数组大小=int(4字节)*5=20
int data1[]={1,2,3,4,5};
cout<<sizeof(data1)<<endl;
//data2是指针,32位系统中,指针固定为4字节
int* data2=data1;
cout<<sizeof(data2)<<endl;
//作为参数传递,data1退化为int型指针,4字节
cout<<GetSize(data1)<<endl;
return 0;
}
#include<iomanip>
int main()
{
double dTemp=100000.5;
cout<<dTemp<<endl;
cout<<setiosflags(ios::fixed)
//<<setiosflags(ios_base::showpoint)
<<setprecision(2)
<<dTemp<<endl;
}
3.二维数组中的查找(P38)(面试题3)
题目:在一个二维数组中,每行都按照从左到右递增的顺序排列,每一列都按照从上到下的顺序递增的顺序排列。完成函数:输入一个这样的二维数组和一个整数,判断数组中是否含有该整数。
注意点如下:
- 函数原型bool find(int* , int row,int column,int key)判断传入的【二维数组】是否为NULL,nROWs是否>0,【判断每个输入参数是否合法】
- 从【右上】或【左下】开始比较,目的是>或<key都可以排除一整行或一整列
bool find(int *ngMatrix,int nRows,int nColumns,int key)
{
if(ngMatrix!=NULL && nRows>0 && nColumns>0)
{
int Row=0,Col=nColumns-1; //从右上角开始比较
while(Row<nRows && Col>=0)//只取右上角的元素比较
{
if(key == ngMatrix[Row*nColumns+Col])
return true;
else if(key < ngMatrix[Row*nColumns+Col])
--Col;
else
++Row;
}
}
return false;
}
int main()
{
int key=0;
int ngArray[4][4]={
{1,2,8,9},
{2,4,9,12},
{4,7,10,13},
{6,8,11,15}
};
if(find(ngArray[0],4,4,key))
cout<<"找到了!"<<endl;
else
cout<<"找不到……"<<endl;
}
测试用例:
- 查找二维数组中包含的数X(Max、Min、Min<X<Max)
- 查找二维数组中不包含的数X(>Max、<Min、Min<X<Max)
- 特殊输入,如NULL 或 nRows<0