• ベストアンサー

配列の配列の入れ替え処理(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; とすれば良いのですが、上の配列の配列どうしの入れ替えでどう書けばいいかよくわかりません。自分で書くと「型が違うよ」と怒られてしまいました。 どう書けば入れ替えできるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

#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]);    }   } }

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • Tasuke22
  • ベストアンサー率33% (1799/5383)
回答No.1

なんだか他の言語とごっちゃになっていませんか? 少なくともコンパイラ言語っぽくないですね。 インタプリタ言語で何かと勘違いされていると思い ます。 C/C++は配列演算は無いでしょう。 int tmp[5][2],a[5][2],b[5][2]; が必要だし。 tmp=a; ではなくて、各要素ごとに代入する必要があります。

sirn
質問者

お礼

........ああ、確かに妙な勘違いをしているようですね....... 少し頭を整理してきます。

sirn
質問者

補足

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]へのポインタが入っているようですが.....

すると、全ての回答が全文表示されます。

関連するQ&A