[英]How to “resize” a dynamic array of objects in c++
可以说我有一个类播放器,它具有成员变量num_houses和类型为house的指针temp1
class player{
private:
int num_houses;
house* temp1;
public:
player(){
num_houses = 0;
temp1 = new house[num_houses];
}
当我尝试调整房屋类型的大小或基本上将房屋类型的元素添加/删除时,我的问题出在我的代码上。 在我的代码中,我碰巧遇到了分段错误。 我很困惑,我是学生,所以任何建议或批评都将对我有很大帮助!
void player::add_house(house tkn){
house* temp = new house[num_houses];
for(int i = 0; i < num_houses; i++){
temp[i] = temp1[i];
}
num_houses++;
if(temp1 != NULL){
delete [] temp1;
}
temp1 = new house[num_houses];
for(int i = 0; i < num_houses-1; i++){
temp1[i] = temp[i];
}
temp1[num_houses-1] = tkn;
delete [] temp;
}
temp1 = new house[num_houses];
当num_houses
为0
时出现问题。
将默认构造函数更改为:
player() : num_houses(0), temp1(nullptr) {}
您可以简化成员函数add_house
以便减少一对新的/删除的。
void player::add_house(house tkn){
num_houses++;
house* temp = new house[num_houses];
for(int i = 0; i < num_houses-1; i++){
temp[i] = temp1[i];
}
temp[num_houses-1] = tkn;
if(temp1 != nullptr){
delete [] temp1;
}
temp1 = temp;
}
要增加数组大小,请重写算法以执行以下步骤:
当然,如果您了解如何,可以重新排列此列表的顺序(4总是在1之后,6总是在1之后,5总是在4之后,依此类推)。
PS,您不必在删除指针之前检查指针是否不为null-删除nullptr不会失败。
UPD :添加的代码
void player::add_house(house tkn {
house* temp = new house[num_houses + 1];
for(int i = 0; i < num_houses; i++) {
temp[i] = temp1[i];
}
num_houses++;
delete [] temp1;
temp1 = temp;
temp1[num_houses-1] = tkn;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.