CPP Multi Dimensional Array

Şuana kadar kullandığımız arrayler tek boyutluydu. Yani indekslerini temsil ederken tek bir sayı kullanıyoruz. 5. elaman 10. eleman 1. eleman gibi. Lakin farklı zamanlarda bu bizim için yeterli olmamaktadır. Örneğin bir resim için 3 boyuta ihtiyacımız var. İlk iki boyut satır ve sütun için gerekliyken 3. boyut r,g,b için gereklidir.

Yukarıda 2 boyutlu bir array görüyorsunuz. Bizler de aşağıda kendi çok boyutlu dizimizi oluşturacağız. Çok boyutlu arrayler hafızada tek boyutlu array gibi dizilir çünkü hafızanın(RAM) kendisi de tek boyutlu bir arraydir. Bizler satır ve sütun sayılarını alıp bunun hangi indekse karşılık geldiğini bulacağız. Biz bunu hesaplarken row-major order ı kullanacağız. Bazıları column-major order kullanmakta.

#include <iostream>
#include <vector>
using namespace std;

const int row_count{5}, column_count{5};

int index(int row_index, int column_index) {
	return row_index*column_count + column_index;
}

void print_arr(int* arr) {
	for (int i = 0; i < row_count; i++){
		for (int j = 0; j < column_count; j++)
			cout << arr[index(i, j)] << " ";		
		cout << endl;
	}
	cout << endl << endl;
}

void identity(int* arr) {
	for (int i = 0; i < row_count; i++) {
		arr[index(i, i)] = 1;
	}
}

void scalar_multiply(int* arr, int k) {
	for (int i = 0; i < row_count; i++) 
		for (int j = 0; j < column_count; j++)
			arr[index(i, j)] *= k;
}

int main() {

	const int size{ row_count * column_count };
	int arr[size]{};

	print_arr(arr);
	identity(arr);
	print_arr(arr);
	scalar_multiply(arr, 5);
	print_arr(arr);

}

Yukarıdaki kodu C++ daki çok boyutlu diziler ile uygulayalım.

#include <iostream>
#include <vector>
using namespace std;

const int row_count{5}, column_count{5};

void print_arr(int arr[row_count][column_count]) {
	for (int i = 0; i < row_count; i++){
		for (int j = 0; j < column_count; j++)
			cout << arr[i][j] << " ";
		cout << endl;
	}
	cout << endl << endl;
}

void identity(int arr[row_count][column_count]) {
	for (int i = 0; i < row_count; i++) {
		arr[i][i] = 1;
	}
}

void scalar_multiply(int arr[row_count][column_count], int k) {
	for (int i = 0; i < row_count; i++) 
		for (int j = 0; j < column_count; j++)
			arr[i][j] *= k;
}

int main() {

	const int size{ row_count * column_count };
	int arr[row_count][column_count]{};

	print_arr(arr);
	identity(arr);
	print_arr(arr);
	scalar_multiply(arr, 5);
	print_arr(arr);

}

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *