2016-10-28 28 views
0

このcplusplusプログラムで正しい結果を得るために助けてください。 このコードでは、配列 'arr'のすべての要素をそれ自身の行にある各内部配列と共に出力しようとしています。多次元配列の要素を印刷する - C++

コード:

using namespace std; 

int main() 
{ 

    int arr[3][4] = { 
     {1,2,3,4},{5,6,7,8},{9,10,11,12} 
    }; 

    for (auto p = begin(arr); arr != end(arr); ++p) { 
     for (auto q = begin(*p); q != end(*p); ++q) { 

      cout << *q << " "; 
     } 
    } 

    cout << endl; 

    keep_window_open(); 
    return 0; 

} 

しかし、私はこのコードを実行すると、コンパイラは私の配列「編曲」の要素の代わりにメモリアドレスの束を示しています。私はそのコードに間違ったことをしましたか?そして私はプログラミングのためにVisual Studio 2015を使っています。あなたが知りたいのであれば。

+0

示されたコードに 'arr'という配列はありません。ファンタジーコードではなく、実際のコードを投稿してください。 –

+1

Typo。 'ia!= end(ia);'を 'p!= end(ia);'に変更してください。 – songyuanyao

+0

@SamVarshavchik申し訳ありません。私はコードを編集しました。 –

答えて

4

はこの試してみてください。

int ia[3][4] = { 
      { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } 
     }; 

     for (int i = 0; i < 3; i++) 
     { 
      for (int j = 0; j < 4; j++) 
      { 
       cout << ia[i][j] << endl; 
      } 
     } 
+0

ありがとう!また、あなたのコードは正常に動作します。私は自分のコードで馬鹿にした。再度、感謝します! –

+0

ようこそ。:) –

0

だけのための楽しい

#include <iostream> 
#include <array> 

int main(void) 
{ 
    std::array<std::array<int, 4>, 3> const array = {{{1,2,3,4},{5,6,7,8},{9,10,11,12}}}; 

    if (array.begin() != array.end()) { 
     auto itarray = array.begin(); 
     if (itarray->begin() != itarray->end()) { { 
      auto itsubarray = itarray->begin(); 
      std::cout << *itsubarray; 
      for (itsubarray = itsubarray + 1; itsubarray != itarray->end(); itsubarray++) { 
       std::cout << " " << *itsubarray; 
      } } 
      for (itarray = itarray + 1; itarray != array.end(); itarray++) { 
       for (int elem : *itarray) { 
        std::cout << " " << elem; 
       } 
      } 
     } 
    } 

    std::cout << std::endl; 

    return 0; 
} 
0

それとも、イテレータを使用する場合:

#include <iterator> 
using std::endl; 
using std::begin; 
using std::end; 
using std::cout; 


int main() { 

    int arr[3][4] = { { 1,2,3,4 },{ 5,6,7,8 },{ 9,10,11,12 } }; 

    for (auto p = begin(arr); p != end(arr); ++p) { 
     for (auto q = begin(*p); q != end(*p); ++q) { 
      cout << *q << " "; 
     } 
    } 

    cout << endl; 
    return 0; 
} 

変更は、あなたが持っていたループのための第1であり、 arr != end(arr)ですが、あなたはp != end(arr)が必要です。配列の長さを変更すると、このループは引き続き機能します。