ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者:sirn 配列の配列の入れ替え処理(C/C++)
困り度:
  • 困っています
int a[5][2]とすると
a[0][0] : 0
a[0][1] : 1
a[1][1] : 2
a[1][1] : 3
a[2][0] : 4
a[2][1] : 5
a[3][0] : 6
a[3][1] : 7
a[4][0] : 8
a[4][1] : 9
こういう形で領域が確保されるはずですが、この配列同士の入れ替えで困っています。
例えば、a[0]とa[4]を交換して
a[0][0] : 8
a[0][1] : 9
a[1][1] : 2
a[1][1] : 3
a[2][0] : 4
a[2][1] : 5
a[3][0] : 6
a[3][1] : 7
a[4][0] : 0
a[4][1] : 1
となるようにしたいのです。
普通はスワップするときにテンポラリとして値を保持する物を確保しておくのですが、型がわからず困っています。
普通にint型どうしの入れ替えなら
int tmp,a,b;
tmp = a;
a = b;
b = a;
とすれば良いのですが、上の配列の配列どうしの入れ替えでどう書けばいいかよくわかりません。自分で書くと「型が違うよ」と怒られてしまいました。
どう書けば入れ替えできるのでしょうか?
質問投稿日時:08/05/03 16:35
質問番号:3994818
この質問に対する回答は締め切られました。
最新から表示回答順に表示良回答のみ表示

回答

良回答20pt

回答者:episteme #include <cstdio>
#include <algorithm>

int main() {
  int a[5][2] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
  std::swap_ranges(a[0], a[0]+2, a[4]); // ココ
  for ( int x = 0; x < 5; ++x ) {
   for ( int y = 0; y < 2; ++y ) {
    std::printf("a[%d][%d] : %d\n", x, y, a[x][y]);
   }
  }
}
種類:回答
どんな人:専門家
自信:自信あり
回答日時:08/05/03 17:39
回答番号:No.2
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

良回答10pt

回答者:Tasuke22 なんだか他の言語とごっちゃになっていませんか?
少なくともコンパイラ言語っぽくないですね。
インタプリタ言語で何かと勘違いされていると思い
ます。

C/C++は配列演算は無いでしょう。

int tmp[5][2],a[5][2],b[5][2]; が必要だし。

tmp=a;
ではなくて、各要素ごとに代入する必要があります。
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:08/05/03 16:50
回答番号:No.1
この回答への補足int tmp,a,bの話は、配列でないint型のもの同士の入れ替えの話で、配列の話とは関係ありません。同じaが出てきてややこしいですが、配列のaとは全く関係有りません。読みにくくて申し訳ないですが.......
int temp,a,b;
temp = a ;
a = b ;
b = temp ;
と書けばaとbの値は入れ替わりますが、配列の配列ではどうやるんだろうかという質問でした。
int a[5][2]と書くとa[0]にはa[0][0]へのポインタが入っているようですが.....
この回答へのお礼........ああ、確かに妙な勘違いをしているようですね.......
少し頭を整理してきます。
 
最新から表示回答順に表示良回答のみ表示