编写一个函数,使用refrences交换两个整数

时间:2017-11-21 17:42:30

标签: c++ function reference swap temp

这是一个特别奇怪的问题,但我试图编写一个函数来交换两个整数的值,而不使用引用或'&'。我不明白这是怎么回事。这是我到目前为止所拥有的。

    void swap (int a, int b)
    {

    int temp;
    temp = a;
    a = b;
    b = temp;

    }

这通常是我会这样做的方式,但由于整数不会永久改变,我不知道如何在没有引用的情况下这样做。有什么建议吗?

谢谢!

2 个答案:

答案 0 :(得分:-2)

您应该更正问题标题。它说“使用参考”。显然,这与你的意思相反。

假设:

  • 真的没有引用和指针允许,不包括任何包装技巧
  • 运行时交换是你想要的 - 而不是编译时间模板技巧
  • 没有课程,因为那将是微不足道的

我能想到一个完全可怕的解决方案。使你的整数全局。

ridiculous_swap.hpp

#ifndef RIDICULOUS_SWAP_HPP
#define RIDICULOUS_SWAP_HPP

extern int first;
extern int second;

void swap_ints();

#endif // RIDICULOUS_SWAP_HPP

ridiculous_swap.cpp

int first = 0;
int second = 0;

void swap_ints()
{
    auto tmp = first;
    first = second;
    second = tmp;
}

的main.cpp

#include "ridiculous_swap.hpp"
#include <iostream>

int main()
{
    first = 23;
    second = 42;
    std::cout << "first " << first << " second " << second << "\n";
    // prints: first 23 second 42

    swap_ints();
    std::cout << "first " << first << " second " << second << "\n";
    // prints: first 42 second 23
}

它对任何东西都没用,但它确实交换了两个整数而不使用引用或指针。

答案 1 :(得分:-2)

有一个老技巧可以在不使用临时变量的情况下交换两个类似整数的变量:

void swap(int& a, int& b)
{
    a ^= b; 
    b ^= a; // b ^ (a ^b)  = a
    a ^= b; // (a ^ b) ^ a = b
}