初心者向けの実証的に回転するアレイ

配列は、プログラミングの原点であった構造です。しかし、あらゆるプログラミング言語のレッスンのすべてのコースで配列が注目されているという事実にもかかわらず、この構造との相互作用の論理に関連する多くの重要な情報はまだ初心者から逃れています。





この投稿の目的は、私がかつて欠けていた配列に関するいくつかの情報を収集することです。初心者向けの投稿。





アレイとは何ですか?

配列は、1つの非破壊ブロックのメモリにある同じタイプのデータの構造です。





メモリ内の1次元配列の位置
メモリ内の1次元配列の位置





多次元配列は同じ方法で保存されます。





メモリ内の2次元配列の位置
メモリ内の2次元配列の位置

これを知っていると、配列要素に異なる方法でアクセスできます。たとえば、9つの3x3要素の2次元配列があります。したがって、正しく表示するには少なくとも2つの方法があります。





最初のオプション(最も簡単):





int arr[3][3] {1, 2, 3, 4, 5, 6, 7, 8, 9};
int y = 3, x = 3;
for (int i = 0; i < y, ++i) {
	for (int j = 0; j < x; ++j) {
  	std::cout << arr[i][j];
  }
  std::cout << std::endl;
}
      
      



2番目のオプション(より難しい):





int arr [9] {1,2,3,4,5,6,7,8,9};
int x = 3, y = 3;
for (int i = 0; i < y; ++i) {
  for (int j = 0; j < x; ++j) {
		std::cout << arr[x * i + j]; // x -  
    }
  std::cout << std::endl;
}
      
      



2次元配列の要素にアクセスするための式。ここで、widthは配列の幅、colは必要な列、rowは必要な行です。





arr [幅*列+行]

2番目のオプションを知っているので、それを常に使用する必要はありませんが、それでも知っておく価値があります。たとえば、ポインタからポインタへのポインタから余分なアスタリスクを取り除く必要がある場合に役立ちます。





そして、これが3次元配列を操作する方法です
int arr[8] {1,2,3,4,5,6,7,8};
int x = 2, y = 2, z = 2;
for (int i = 0; i < x; ++i) {
	for (int j = 0; j < y; ++j) {
  	for (int k = 0; k < z; ++z) {
    	std::cout << arr[x * y * i + y * j + k];
    }
    std::cout << std::endl;
  }
  std::cout << std::endl;
} 
      
      



, .





, height - , width - , depth - ( ), col - , row - :





arr [高さ*幅*深さ+幅*列+行]

.





, .





- , .





. , :





1) .





, .





int data[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
int newArray[3][4];
int height = 3, width = 4;
for (int i = 0; i < height; ++i) {
	for (int j = 0; j < width; ++j) {
  	newArray[i][j] = data[i][width - j - 1];
  }
}
      
      



.





int data[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
int newArray[3][4];
int height = 3, width = 4;
for (int i = 0; i < height; ++i) {
	for (int j = 0; j < width; ++j) {
  	newArray[i][j] = data[height - i - 1][j];
  }
}
      
      



2) 90 .





, , .





アルゴリズムの段階的な実行

, c .





解決策につながるグラフ
,
int data[3][2] = {1,2,3,4,5,6};							
int newArray[2][3];					
int height = 3, width = 2; 	//   ()
int newHeight = width, newWidth = height;

//  
for (int i = 0; i < newHeight; ++i) {
	for (int j = 0; j < newWidth; ++j) {
  	newArray[i][j] = data[j][i];			// data -  
  }
}

//     
for (int i = 0; i < newHeight; ++i) {
	for (int j = 0; j < newWidth/2; ++j) {
  	int temp = newArray[i][j];
    newArray[i][j] = newArray[i][newWidth - j - 1];
    newArray[i][newWidth - j - 1] = temp;
  }
}

      
      



, . , .





: . new.





, IT.





, , . , , , — , . .





, , .








All Articles