c++ primer 6.2.2节练习答案

练习6.11

 1 void reset(int &num)
 2 {
 3     num = 0;
 4 }
 5 
 6 int main()
 7 {
 8     int num1;
 9     while (cin >> num1)
10     {
11         reset(num1);
12         cout << num1 << endl;
13     }
14     system("pause");
15     return 0;
16 }

练习6.12

 1 void exchange_num(int &num,int &num1)
 2 {
 3     int temp;
 4     temp = num;
 5     num = num1;
 6     num1 = temp;
 7 }
 8 
 9 int main()
10 {
11     int a1,a2;
12     while (cin >> a1 >> a2)
13     {
14         exchange_num(a1, a2);
15         cout << a1 << " " << a2 << endl;
16     }
17     system("pause");
18     return 0;
19 }

使用引用比指针交换要简单,因为我们直接传入的是对象而不是对象的地址,也不需要新建两个指针分别指向两个对象。

练习6.13

void f(T):实参传过来,作用范围仅在函数内部,本身实参没有变化。

void f(&T):引用的形参绑定了实参,一旦引用的形参发生变化,实参也会跟着变化。

练习6.14

如果需要改变传入实参的值的话,就使用引用。

练习6.15

s是string类型的,可能会比较长,应该尽量避免使用直接拷贝,应该使用引用形参是比较好的选择,而s在程序中并不需要改变,所以使用常量引用;c是要找的字符,string类型可以看做是数组存放,其中每一个元素存放的类型应该是字符类型,occurs统计c出现的次数,需要改变其值,且需要通过occurs将其值隐含的传递出去。所以应该是size_type类型的引用类型。如果s是普通引用,则s在函数中可以被改变。如果occurs是常量引用,他的值就将会是实参的值不会再次改变。

 1 string::size_type find_char(const string &s, char c, string::size_type &occurs)
 2 {
 3     string::size_type ret = s.size();
 4     occurs = 0;
 5     for (decltype(ret) i = 0; i != s.size(); ++i)
 6     {
 7         if (s[i] == c)
 8         {
 9             if(ret == s.size())
10                 ret = i;
11             ++occurs;
12         }
13     }
14     return ret;
15 }
16 
17 int main()
18 {
19     string s{ "asdfghjklqwaeryto" };
20     char c = 'a';
21     string::size_type sum = 5;
22     auto j = find_char(s, c, sum);
23     cout << j << " " << sum << endl;
24     system("pause");
25     return 0;
26 }

 

转载于:https://www.cnblogs.com/wuyinfenghappy/p/7275614.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值