【发布时间】:2013-01-07 06:58:06
【问题描述】:
我的代码有问题,我想知道是否有人可以看看,我创建了一个函数来从数组中删除特定元素。我使用线性搜索来查找元素,然后用后面的元素覆盖我想要删除的元素,因为我还没有找到专门删除元素的方法。我的问题是代码并没有真正起作用,因为元素没有被覆盖,还有一种方法可以在元素被覆盖后在数组中留下一个空格。
下面是我的代码:
void deleteinfo()
{
string search ;
int found ;
cout << "\n Delete A Player's Information \n\n" ;
cout << "Please Enter The Player's Last Name : " ;
cin >> search ;
found=linsearch(search);
if (found==-1)
{
cout << "\n There is no player called " << search ;
}
else
{
player[found].getFirstName() = player[found + 1].getFirstName() ;
player[found].getLastName() = player[found + 1].getLastName() ;
player[found].getAge() == player[found + 1].getAge() ;
player[found].getCurrentTeam() = player[found + 1].getCurrentTeam() ;
player[found].getPosition() = player[found + 1].getPosition() ;
player[found].getStatus() = player[found + 1 ].getStatus() ;
cout << "\n Player has been deleted." ;
}
cin.get() ;
menu() ;
}
int linsearch(string val)
{
for (int j=0; j <= 3; j++)
{
if (player[j].getLastName()==val)
return j ;
}
return -1 ;
}
【问题讨论】:
-
让陌生人发现你的代码中的错误是没有效率的。请使用调试器(或添加打印语句)帮助隔离问题,然后创建minimal test-case。
-
几乎所有的容器,如
std::vector、std::list等,都有办法从中间移除一个元素。 C 风格的数组容易出错且乏味。 -
我不能使用矢量和列表等标题。我的编码方式很有限。谢谢
-
就像 aschepler 已经说过的,考虑使用标准容器。或者,如果您必须手动执行此操作,请使用链表,或者(这可能正是您想要的),将数组中的指针值设置为 NULL。 (假设您使用的是指针数组而不是“静态”对象)
-
是否也需要将
found + 2的内容移动到found + 1?