Data Structures, Algorithms, and Applications in C++(数据结构算法与应用),第一章练习题答案

由于本人在自学,因此下列代码不一定正确,仅供参考,如果有错,请指正

  • chapter_one
    3、
template<typename T>
void fill(T* arr, int start,int end,const T value)
{
   
	for (int i = start; i < end-1; ++i)
	{
   
		arr[i] = value;
	}
}

4、

template<typename T>
int inner_product(T *a, T *b, int n)
{
   
	int sum = 0;
	for (int i = 0; i < n; ++i)
	{
   
		sum += a[i] * b[i];
	}
	return sum;
}

5、

template<typename T>
void iota(T* arr, int size, const int value)
{
   
//这里a[i]=value+i;
//但是网站上给的答案是a[i]+=value;,作者应该是表达错了
	for (int i = 0; i < size; ++i)
	{
   
		arr[i] = value + i;
	}
}

7、

template<typename T>
size_t mismatch(T* arr, T *brr, int size)
{
   
	for (int i = 0; i < size; ++i)
	{
   
		if (arr[i] != brr[i])
			return i;
	}
	//如果都相等,就返回最后一个元素的下一个元素
	return size;
}

8、

书上说:签名是由函数的形参类型以及形参个数决定的。返回类型不同无法重载函数,会造成二义性,因此,这两个函数没办法被区分,所以是具有相同的签名

9、

1、函数调用abc(int,int,int),因为abc(1,1,1)的实参类型都是int,所以是精确匹配
2、函数调用abc(float,float,float),因为abc(1.0F,2.0F,3.0F)的实参类型是float,精确匹配
(这里之所以要在数目后面加上一个F,是因为C++默认的小数类型是double,在小数后面加F,是告诉编译器,这是float类型)
3、这里会编译报错,因为abc(1,2,3.0F)实参类型是int,int,float,能够出现两种转换,一种是1,2转换成float类型,一种是3.0F转换成int类型,对于编译器来说,这两种转换都都属于类型转换,是同样的函数匹配等级,因此出现了二义性(注意,和要转换的参数的个数无关,编译器只考虑是否要发生转换)
4、同理,abc(1.0,2.0,3.0)的实参都是double类型,double对于int和float都不是精确匹配,都需要进行类型转换,而转换成int和float是同样的函数匹配转换等级,因此出现了二义性,编译器会报错

10、

int abc(int a, int b, int c)
{
   
	if (a < 0 && b < 0 && c < 0)
		throw 1;
	if (a == 0 && b == 0 && c == 0)
		throw 2;
	return a + b * c;
}
int main()
{
   
	try {
    abc(-2,-1,-3); }
	catch (int a)
	{
   
		if (a == 2)
			cout << "输入的值不能全为0" << endl;
		else
			cout << "输入的值不能都小于0" << endl;	
	}
}

12、

template<
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值