Bagaimana Anda menginisialisasi array 3d di C++
int min[1][1][1] = {100, { 100, {100}}}; //this is not the way
Bagaimana Anda menginisialisasi array 3d di C++
int min[1][1][1] = {100, { 100, {100}}}; //this is not the way
Array dalam pertanyaan Anda hanya memiliki satu elemen, jadi Anda hanya memerlukan satu nilai untuk menginisialisasinya sepenuhnya. Anda memerlukan tiga set kurung kurawal, satu untuk setiap dimensi array.
int min[1][1][1] = {{{100}}};
Contoh yang lebih jelas mungkin:
int arr[2][3][4] = { { {1, 2, 3, 4}, {1, 2, 3, 4}, {1, 2, 3, 4} },
{ {1, 2, 3, 4}, {1, 2, 3, 4}, {1, 2, 3, 4} } };
Seperti yang Anda lihat, ada dua grup, masing-masing berisi tiga grup yang terdiri dari 4 angka.
warning: missing braces around initializer (near initialization for 'min[0]')
- person Carl Norum; 02.02.2010
Daripada menggunakan array multidimensi statis, Anda mungkin harus menggunakan array satu dimensi dan menghitung indeks dengan perkalian. Misalnya.
class Array3D {
size_t m_width, m_height;
std::vector<int> m_data;
public:
Array3D(size_t x, size_t y, size_t z, int init = 0):
m_width(x), m_height(y), m_data(x*y*z, init)
{}
int& operator()(size_t x, size_t y, size_t z) {
return m_data.at(x + y * m_width + z * m_width * m_height);
}
};
// Usage:
Array3D arr(10, 15, 20, 100); // 10x15x20 array initialized with value 100
arr(8, 12, 17) = 3;
std::vector mengalokasikan penyimpanan secara dinamis, yang merupakan hal yang baik karena ruang tumpukan seringkali sangat terbatas dan array 3D dengan mudah menggunakan banyak ruang. Membungkusnya dalam kelas seperti itu juga membuat penerusan array (dengan menyalin atau dengan referensi) ke fungsi lain menjadi sepele, sementara melakukan penerusan array statis multidimensi sangat bermasalah.
Kode di atas hanyalah sebuah contoh dan dapat dioptimalkan serta dibuat lebih lengkap. Implementasi ini juga sudah ada di berbagai perpustakaan, tapi saya tidak tahu ada.
new int[2][3][4]
akan berhasil. Adapun kode @Tronic, hanya menduplikasi upaya std::valarray
.
- person Potatoswatter; 02.02.2010
std::valarray
dengan berlangganan dengan std::gslice
. Lihat tautan di jawaban saya. Apa maksud Anda, belum mendefinisikan operasi aritmatika apa pun untuk array?
- person Potatoswatter; 02.02.2010
Berikut cara lain untuk mengalokasikan array 3D secara dinamis di C++.
int dimX = 100; int dimY = 100; int dimZ = 100;
int*** array; // 3D array definition;
// begin memory allocation
array = new int**[dimX];
for(int x = 0; x < dimX; ++x) {
array[x] = new int*[dimY];
for(int y = 0; y < dimY; ++y) {
array[x][y] = new int[dimZ];
for(int z = 0; z < dimZ; ++z) { // initialize the values to whatever you want the default to be
array[x][y][z] = 0;
}
}
}
int*** array;
berguna saat mendeklarasikan pointer ke array 3D yang belum dialokasikan di C.
- person Doug Thompson; 18.10.2019
Semua orang sepertinya lupa std::valarray
. Ini adalah templat STL untuk array multidimensi datar, dan mengindeks serta memotongnya.
http://www.cplusplus.com/reference/std/valarray/
Tidak ada inisialisasi statis, tetapi apakah itu penting?