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

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.lryc.cn/news/42448.html

相关文章:

  • SLAM算法之HectorSLAM,Gmapping,KartoSLAM,CoreSLAM和LagoSLAM
  • phpstorm断点调试
  • 做一个前端网页送给女朋友~轮播图+纪念日
  • CSDN 编程竞赛三十九期题解
  • ChatGPT来了你慌了吗?
  • Dijkstra 算法
  • EIgamal 算法实现与解读
  • 静态通讯录动态通讯录制作详解
  • 2023最新最详细【接口测试总结】
  • 【java基础】Stream流的各种操作
  • 【Python练习】序列结构
  • CDN加速缓存的定义与作用
  • Java并发高频面试题
  • CVPR 2023 | 旷视研究院入选论文亮点解读
  • Vue3 学习总结补充(一)
  • 使用ChatGPT 开放的 API 接口可以开发哪些自研工具?
  • I2C和SPI总线以及通信
  • Spring八股文
  • 20 k8sMetric 简介
  • 面试问了解Linux内存管理吗?10张图给你安排的明明白白
  • 【C++】内联函数inline
  • C++演讲比赛流程管理系统_黑马
  • 谈谈低代码的安全问题,一文全给你解决喽
  • [数据结构]二叉树OJ(leetcode)
  • flutter 输入时插入分隔符
  • 静态版通讯录——“C”
  • 前端基础开发环境搭建工具等
  • 华为OD机试题【IPv4 地址转换成整数】用 Java 解 | 含解题说明
  • [数据结构]排序算法
  • 不愧是2023年就业最难的一年,还好有车企顶着~