所以,我以这种方式动态分配了一个二维数组:
int rs, co;
cin >> ro;
cin >> co;
int **array = new int* [ro];
for(int i = 0; i < ro; i++){
array[i] = new int [co];
}
我填写了它:
for(int i = 0; i < ro; i++){
for(int j = 0; j < co; j++){
cout << "Row: " << i << " Column: " << j << " : ";
cin >> *(*(array + i) + j);
}
}
我的问题是: 如何释放用户给出X的X行或列? 我知道我应该使用“删除”命令,但我无法理解如何
答案 0 :(得分:2)
您只需拨打
即可删除一行delete [] array[i];
您无法删除列,因为列不像行一样排列。 例如,假设我们有一个像这样的2D数组:
row1: abcd
row2: efgh
row3: ijkl
在计算机中,数据实际排列如下:
abcd .... other data.... efgh .... other data..... ijkl
删除行很容易,因为计算机将它们排列在一起。但是,因为行是动态创建的,所以它们不必彼此相邻。它们分配在有空间的地方。
因此,列根本没有排列,“解除分配”没有意义。
答案 1 :(得分:0)
使用2D矢量阵列很容易。 只需对行使用擦除功能。 对于列,迭代行并删除每个元素:
int ro = 4, co = 3;
vector< vector<int> > vec(ro);
for (int i = 0; i < ro; i++)
vec[i].resize(co);
// fill and print the matrix
for (int i = 0; i < vec.size(); i++) {
for (int j = 0; j < vec[i].size(); j++) {
vec[i][j] = i;
cout <<vec[i][j] << " ";
}
cout << endl;
}
int rowErasePosition = 1;
vec.erase(vec.begin() + rowErasePosition);
// reprinting
cout << "second row deleted" << endl;
for (int i = 0; i < vec.size(); i++) {
for (int j = 0; j < vec[i].size(); j++) {
cout << vec[i][j] << " ";
}
cout << endl;
}
//deleting column
int columnErasePosition = 1;
for (int i = 0; i < vec.size(); i++) {
vec[i].erase(vec[i].begin() + columnErasePosition);
}
// reprinting
cout << "second column deleted" << endl;
for (int i = 0; i < vec.size(); i++) {
for (int j = 0; j < vec[i].size(); j++) {
cout << vec[i][j] << " ";
}
cout << endl;
}