• 6. 交换函数


    题目:

    解释为什么下面程序的交换函数没有把形参 x 和 y 所对应的实参的值交换。如何修改代码,使实参的值得到交换?

    原交换程序:

    1 void swap(int x,  int y) {
    2   int temp = x;
    3   x = y;
    4   y = temp;
    5 }

    思路:

    在C++中,参数传递方式有三种,分别为传值,传地址,传引用。在以上程序中,是按照传值的方式进行的。在实参传入时,将副本给形参。(如果是内置数据类型,则进行复制;如果是用户自定义数据类型,则调用复制构造函数)。传值不会改变实参,想要改变实参,则应该传指针或引用。这里我选择传引用。

    修改后的程序:

    1 template <typename T>
    2 void new_swap(T& a, T& b) {
    3     T temp = a;
    4     a = b;
    5     b = temp;
    6 }

    在上面修改后的程序里,有几个地方需要解释。

    第一,返回值为 void,因为进行交换不需要返回值。

    第二,temp 的类型为 T,而不是 T&,因为 a 是一个 T 类型的,并且 a 是一个引用,所以 temp 也为 T 类型。

    代码:

     1 #include <iostream>
     2 using namespace std;
     3 
     4 template <typename T>
     5 void new_swap(T& a, T& b) {
     6     T temp = a;
     7     a = b;
     8     b = temp;
     9 }
    10 
    11 int main() {
    12     int int_a, int_b;
    13     cout << "Enter two int : ";
    14     cin >> int_a >> int_b;
    15     cout << "Before swap : " << int_a << " " << int_b << endl;
    16     new_swap(int_a, int_b);
    17     cout << "After swap : " << int_a << " " << int_b << endl;
    18 
    19     string str1, str2;
    20     cout << "Enter two string : ";
    21     cin >> str1 >> str2;
    22     cout << "Before swap : " << str1 << " " << str2 << endl;
    23     new_swap(str1, str2);
    24     cout << "After swap : " << str1 << " " << str2 << endl;
    25 
    26     return 0;
    27 }
  • 相关阅读:
    ORMs Under the Hood
    django-spaghetti-and-meatballs 0.2.0 : Python Package Index
    Django
    What is entity relationship diagram?
    Sov5搜索
    Django中国社区
    Django中的Model(字段)
    Django中的Model(操作表)
    Fbric、Ansible、Docker、Chaos Monkey:DevOps工具的年中回顾
    基于ansible role实现LAMP平台批量部署
  • 原文地址:https://www.cnblogs.com/Hello-Nolan/p/12303058.html
Copyright © 2020-2023  润新知