当前位置: 首页 > article >正文

C++ Primer第五版_第六章习题答案(21~30)

文章目录

      • 练习6.21
      • 练习6.22
      • 练习6.23
      • 练习6.24
      • 练习6.25
      • 练习6.26
      • 练习6.27
      • 练习6.28
      • 练习6.29
      • 练习6.30

练习6.21

编写一个函数,令其接受两个参数:一个是int型的数,另一个是int指针。函数比较int的值和指针所指的值,返回较大的那个。在该函数中指针的类型应该是什么?

#include <iostream>
using std::cout;

int larger_one(int i, const int *p)
{
	return (i > *p) ? i : *p;
}

int main()
{
	int i = 6;
	cout << larger_one(7, &i);

	return 0;
}

应该是 const int * 类型。

练习6.22

编写一个函数,令其交换两个int指针。

#include <iostream>
#include <string>

void swap(int*& lft, int*& rht)
{
	auto tmp = lft;
	lft = rht;
	rht = tmp;
}

int main()
{
	int i = 42, j = 99;
	auto lft = &i;
	auto rht = &j;
	swap(lft, rht);
	std::cout << *lft << " " << *rht << std::endl;

	return 0;
}

练习6.23

参考本节介绍的几个print函数,根据理解编写你自己的版本。依次调用每个函数使其输入下面定义的i和j:

int i = 0, j[2] = { 0, 1 };
#include <iostream>
using std::cout; using std::endl; using std::begin; using std::end;

void print(int i)
{
	cout << i << endl;
}

void print(const int *beg, const int *end)
{
	while (beg != end)
		cout << *beg++ << endl;
}

void print(const int ia[], size_t size)
{
	for (size_t i = 0; i != size; ++i)
	{
		cout << ia[i] << endl;
	}
}

void print(int (&arr)[2])
{
	for (auto i : arr)
		cout << i << endl;
}

int main()
{
	int i = 0, j[2] = { 0, 1 };

	print(i);
	print(begin(j), end(j));
	print(j, end(j) - begin(j));
	print(j);

	return 0;
}

练习6.24

描述下面这个函数的行为。如果代码中存在问题,请指出并改正。

void print(const int ia[10])
{
	for (size_t i = 0; i != 10; ++i)
		cout << ia[i] << endl;
}

当数组作为实参的时候,会被自动转换为指向首元素的指针。因此函数形参接受的是一个指针。如果要让这个代码成功运行,可以将实参改为数组的引用。

void print(const int (&ia)[10])
{
	for (size_t i = 0; i != 10; ++i)
		cout << ia[i] << endl;
}

练习6.25

编写一个main函数,令其接受两个实参。把实参的内容连接成一个string对象并输出出来。

#include <iostream>
#include <string>

int main(int argc, char **argv)
{
	std::string str;
	for (int i = 1; i != argc; ++i)
		str += std::string(argv[i]) + " ";

	std::cout << str << std::endl;
	return 0;
}

练习6.26

编写一个程序,使其接受本节所示的选项;输出传递给main函数的实参内容。

#include <iostream>
#include <string>

int main(int argc, char **argv)
{
	std::string str;
	for (int i = 1; i != argc; ++i)
		str += std::string(argv[i]) + " ";

	std::cout << str << std::endl;
	return 0;
}

练习6.27

编写一个函数,它的参数是initializer_list类型的对象,函数的功能是计算列表中所有元素的和。

#include <iostream>
#include <initializer_list>

int sum(std::initializer_list<int> const& il)
{
	int sum = 0;
	for (auto i : il) 
		sum += i;
	return sum;
}

int main(void)
{
	auto il = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	std::cout << sum(il) << std::endl;

	return 0;
}

练习6.28

在error_msg函数的第二个版本中包含ErrCode类型的参数,其中循环内的elem是什么类型?

elemconst string & 类型。

练习6.29

在范围for循环中使用initializer_list对象时,应该将循环控制变量声明成引用类型吗?为什么?

应该使用常量引用类型。initializer_list 对象中的元素都是常量,我们无法修改initializer_list 对象中的元素的值。

练习6.30

编译第200页的str_subrange函数,看看你的编译器是如何处理函数中的错误的。

错误信息(vs2013):

错误 1 error C2561: “str_subrange”: 函数必须返回值


http://www.kler.cn/a/4912.html

相关文章:

  • imageio 图片转mp4 保存mp4
  • ZooKeeper集群安装
  • 手把手教你在Windows 10,MacOS和Linux中安装TensorFlow 2-GPU版本,亲测有效(附相关安装下载资源)
  • DINO-DETR在CADC数据集进行实验与分析
  • 12.Java之接口
  • 1.3 从0开始学Unity游戏开发--引擎和编辑器
  • 如何利用开源思想开发一个SEO友好型网站
  • 进入软件测试行业需要学习多久
  • 【新2023Q2模拟题JAVA】华为OD机试 - 绘图机器
  • 基于全志F133-A使用adb调试
  • Heic是什么格式?如何在电脑里打开?
  • Linux——基本指令
  • leetcode 括号(面试题)
  • Prometheus监控实战系列九:主机监控
  • 【组织架构】中国铁路上海局集团有限公司
  • 光耦合器的工作,类型和应用
  • 【案例教程】R语言贝叶斯方法在生态环境领域中的高阶技术
  • ai对话一例
  • 华为OD机试题【异常的打卡记录】用 Java 解 | 含解题说明
  • C++17好用的类
  • NVIDIA英伟达又发布了哪些黑科技?