「すごいスワップ」の編集履歴(バックアップ)一覧はこちら

すごいスワップ」(2010/10/31 (日) 20:56:33) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

2つの値を交換するには、三角代入法を使う a=b b=c c=a というやつ。 これをmemcpyを使うことでより汎用的な仕様になる。 #asciiart(blockquote){ 'a,bの値を交換する。sizeにはa,bの型のサイズ Function swap(a As *Byte, b As *Byte, size As Long) As Long Dim s1 As *Byte s1 = malloc(size) If s1 = NULL Then Exit Function memcpy(s1, a , size) memcpy(a , b , size) memcpy(b , s1, size) free(s1) swap = 1 End Function #N88BASIC Dim s[100] As Byte, t[100] As Byte, c As Long Dim i As Long, j As Long Dim a As Double, b As Double i = 444 j = 78956 a = -8.5 b = 98.7654 lstrcpy(s, "asdf") lstrcpy(t, "qwer789") Print MakeStr(s);"<->"; MakeStr(t), i;"<->";j, a;"<->";b, swap(s, t, Len(s)) swap(VarPtr(i), VarPtr(j), SizeOf(Long)) swap(VarPtr(a), VarPtr(b), SizeOf(Double)) Print MakeStr(s);"<->";MakeStr(t), i;"<->";j, a;"<->";b, } 2つの値を交換する別の方法として、こにょうな方法は速度が遅く、 大量のデータを扱うには不向き。 そこでポインタを差し替える方法もあるが、 いずれにせよ値を交換することの内容なアルゴリズムを採択したいものだ。

表示オプション

横に並べて表示:
変化行の前後のみ表示: