2017-11-21 6 views
-6

これは特に奇妙な質問ですが、参照を使わずに2つの整数の値を交換する関数、つまり '&'を書こうとしています。私はこれがどのように可能であるかわかりません。ここに私がこれまで持っているものがあります。Refrencesを使って2つの整数をスワップする関数を書く

void swap (int a, int b) 
    { 

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

    } 

これは、通常、私はそれを行うだろう方法でしょうが、整数は恒久的に変化しないので、私は参照せずにこれを行うだろうかに関しては見当がつかない。助言がありますか?

ありがとうございます!

+0

あなたが値渡しされています。つまり、スワップ機能が内部でスワップする可能性がありますが、これは呼び出し元には影響しません。 – drescherjm

+0

ポインタは(技術的には)何かを参照するという意味での参照ですが、 'void swap(int&a、int&b) 'と同じ方法ではありません。 –

+0

リクエストの全内容は何ですか?それは意味をなさない。 –

答えて

-1

質問のタイトルを修正する必要があります。それは "参照を使用して"と言います。それはあなたが意味するものとは正反対です。そのため、時間テンプレート策略

  • ノークラスをコンパイルしないとは対照的に、 -

    • 真になしの参照とポインタ許可を、ランタイムスワップは、あなたが望むものである
    • 任意のラッパーのトリックをexluding:

      ことを想定すると、簡単になります

    私は完全に恐ろしい解決策を考えることができます。 intsグローバルを作成します。

    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 
    } 
    

    I tは役に立ちませんが、参照やポインタを使わずに2つの整数を入れ替えます。

  • -1

    一時変数を使用せずに、2つの整数のような変数を交換するには、この古いトリックがあります:

    void swap(int& a, int& b) 
    { 
        a ^= b; 
        b ^= a; // b^(a ^b) = a 
        a ^= b; // (a^b)^a = b 
    } 
    
    関連する問題