博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第六章 6.2.3节练习
阅读量:2420 次
发布时间:2019-05-10

本文共 1486 字,大约阅读时间需要 4 分钟。

练习6.16

下面的这个函数虽然合法,但是不算特别有用。指出它的局限性并设法改善。

bool is_empty(string& s) {return s.empty();}

解答:

这里推荐使用常量引用,或者是复制传参。确保原始字符串不会被函数进行不必要的修改。

练习6.17

编写一个函数,判断string对象中是否含有大写字母。编写另一个函数,把string对象全都改写成小写形式。在这两个函数中你使用的形参类型相同吗?为什么?

解答:

#include 
#include
#include
using namespace std;bool HasUpper(const string& str){ for (auto i : str){ if (isupper(i)) return true; } return false;}void ToUpper(string &str){ for (size_t i = 0; i != str.size(); ++i){ str.at(i) = toupper(str.at(i)); }}int main(){ string str = "abcDefg"; cout << boolalpha << HasUpper(str) << noboolalpha <
两个函数的参数类型不同。

判断是否有大写字母的函数只需要去遍历字符串就可以了,不需要对字符串有任何改变,所以使用常量引用。

改写成大写字母的需要对原有的字符串进行修改,所以采用了直接引用。

练习6.18

为下面的函数编写函数声明,从给定的名字中推测函数具备的功能。

(a) 名为compare的函数,返回布尔值,两个参数都是matrix类的引用。

(b) 名为change_val的函数,返回vector<int>迭代器,有两个参数:一个是int,另一个是vector<int>的迭代器。

解答:

(a) bool compare(matrix &, matrix &);

比较两个矩阵

(b) vector<int> change_val(int, vector<int>);

将容器中的某个值,或者全部值替换成int的值。

练习6.19

假设有如下声明,判断哪个调用合法、哪个调用不合法。对于不合法的函数调用,说明原因。

double calc(double);

int count(const string &, char);

int sum(vector<int>::iterator, vector<int>::iterator, int);

vector<int> vec(10);

(a) calc(23.4, 55.1);

(b) count("abcda", 'a');

(c) calc(66);

(d) sum(vec.begin(), vec.end(), 3.8);

解答:

(a) 不合法,参数数量不对

(b) 合法

(c) 合法

(d) 合法

练习6.20

引用形参什么时候应该是常量引用?如果形参应该是常量引用,而我们将其设为了普通引用,会发生什么情况?

解答:

(1) 当我们不需要对参数值进行改变的情况下,使用常量引用是高效的。并且,当函数要对其进行修改的时候,程序还会给予程序员提示。

(2) 如果函数写的合理,当改换成普通引用也不会有什么影响。但当函数质量不能保证的情况下,换成普通引用可能会改变原有量的值,可能会对后面造成影响。

转载地址:http://ywqlb.baihongyu.com/

你可能感兴趣的文章
context.Context
查看>>
优先队列
查看>>
redis深度历险学习笔记--基础与应用篇
查看>>
单链表翻转
查看>>
检查表达式中的括号是否匹配
查看>>
一道关于 goroutine 的面试题
查看>>
信号量的使用方法
查看>>
Redis 缓存穿透、击穿、雪崩
查看>>
RabbitMQ(1): docker-compose安装rabbitmq及简单使用Hello World
查看>>
leetcode 525. 连续数组
查看>>
利用序列化实现对象的拷贝
查看>>
is-a,has-a,like-a是什么
查看>>
简单工厂、工厂、抽象工厂的对比
查看>>
J2EE的体系架构——J2EE
查看>>
对于关系型数据库中的索引的基本理解
查看>>
索引,主键,唯一索引,联合索引的区别
查看>>
剪桌腿的最小代价
查看>>
Zookeeper原理架构
查看>>
利用ZooKeeper简单实现分布式锁
查看>>
Lock、ReentrantLock、synchronized
查看>>