/*
//返回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;
}