我有一個結構,根據用戶在運行時的輸入,它將需要一維數組或3D數組。它永遠不會需要兩者。現在,我已經像下面的示例代碼中那樣設置了它,其中單獨的變量可以指向一維數組或3D數組。我想在結構中只有一個變量可以指向一維數組或維數在運行時設置的3D數組。我有C的中級知識,並且是C++的初學者。我願意接受一個基於C++概念的答案,但如果沒有減速(或可以忽略的減速),則與相比只有。如果它是一個3D數組,那麼訪問和更改數組值的for循環是我的代碼中最大的瓶頸。一旦數組被設置,我就不需要改變數組的尺寸或大小。在運行時設置數組維數
有沒有辦法做到這一點,或者我應該解決在我的結構中總是有一個無關的變量?
#include <iostream>
using namespace std;
typedef struct {
int dim;
int *one_d_arr;
int ***three_d_arr;
} Struct;
int main() {
int count = 0;
int *arr1 = (int*) malloc(2 * sizeof(int));
arr1[0] = 0;
arr1[1] = 1;
int ***arr3 = (int***) malloc(2 * sizeof(int**));
for (int i=0; i<2; i++) {
arr3[i] = (int**) malloc(2 * sizeof(int*));
for (int j=0; j<2; j++) {
arr3[i][j] = (int*) malloc(2 * sizeof(int));
for (int k=0; k<2; k++) {
arr3[i][j][k] = count++;
}
}
}
Struct s;
s.one_d_arr = NULL;
s.three_d_arr = NULL;
cout << "Enter number of dimensions: ";
cin >> s.dim;
if (s.dim==1) {
s.one_d_arr = arr1;
cout << s.one_d_arr[0] << ", " << s.one_d_arr[1] << endl;
}
else if (s.dim==3) {
s.three_d_arr = arr3;
cout << s.three_d_arr[0][0][0] << ", " << s.three_d_arr[0][0][1] << endl;
cout << s.three_d_arr[0][1][0] << ", " << s.three_d_arr[0][1][1] << endl;
cout << s.three_d_arr[1][0][0] << ", " << s.three_d_arr[1][0][1] << endl;
cout << s.three_d_arr[1][1][0] << ", " << s.three_d_arr[1][1][1] << endl;
}
else {
cout << "Must enter 1 or 3" << endl;
}
}
'C/C++'是UB .. –
我想你可能想用用C'new'(而不是'malloc')++。 – pzaenger
所以標籤以'C++'結尾 - 對我來說看起來更像'c'風格。 – 4386427