我正在使用C ++进行练习,我试图了解如何从列表中删除元素并将其余部分移到左侧。我想知道是否有一个简洁的解决方案。这是我的版本,似乎可以完成这项工作,但我觉得有更好的方法:
Account AccountList::remove(int i){
if(i>=0 && i<size()) {
for (int n = i; n < size(); n++) {
if(i+1!=size()) {
aList[n]=aList[n+1];
}
}
sz--;
return aList[i];
} else {
return Account();
}
}
答案 0 :(得分:4)
你有两个问题。
更正后的内容如下:
Account AccountList::remove(int i)
{
if(i>=0 && i<size())
{
Account a = aList[i]
for (int n = i; n < size() - 1; n++)
{
if(i+1!=size())
{
aList[n]=aList[n+1];
}
}
sz--;
return a;
} else
{
return Account();
}
}
答案 1 :(得分:1)
如果您这样做,则表示您没有正确实施列表。列表应具有复杂性O(1)
以删除元素。这看起来更像是一个数组或一个向量。
列表通常由彼此链接的节点组成,在这种情况下,您只需要删除有问题的节点,并使之前的节点指向您要删除的节点之后的节点。