C++Primer第五版第六章练习6.15

/*
//返回s中c第一次出现的位置索引
//引用形参occurs负责统计c出现的总次数
string::size_type find_char(const string &s, char c, 
                                string::size_type &occurs)
{
    auto ret = s.size();
    occurs = 0;
    for(decltype(ret) i=0; i!=s.size();++i) {
        if(s[i]==c) {
            if(ret==s.size())
                ret=i;
            ++occurs;
        }
    }
    return ret;
}                

练习6.15:
(a)说明find_char函数中的三个形参为什么是现在的类型?
s:绑定到常量字符串的引用类型;
c:字符类型
occurs:绑定到string::size_type类型变量的引用。

(b)特别说明为什么s是常量引用而occurs是普通引用?
s代表着查找范围,值不需要改变。
occurs, 需要记录c出现的总次数,值需要改变。

(c)为什么s和occurs是引用类型而c不是?
s:拷贝大的类类型对象、容器对象、可能非常长的string对象,比较低效,应该避免直接拷贝它们,使用引用形参是比较明智的选择。
occurs:find_char函数需要返回两个值,一个是c第一次出现的位置,这个通过return返回,另一个是返回c出现的总次数,这个通过设置额外的引用形参,令其保存字符出现的次数。
c:只占1个字节,拷贝代价很低,其次,函数不需要改变c的值。

(d)如果令s是普通引用会发生什么情况?
可能会错误地改变实参字符串。

(e)如果令occurs是常量引用会发生什么情况?
occurs的值不能改变了,"occurs = 0;"会是一个错误。
*/

#include "TouWenJian_6.h"
int main()
{
    return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值