从C ++中的列表中删除元素

时间:2012-07-29 18:54:27

标签: c++ list element shift

我正在使用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();
}
}

2 个答案:

答案 0 :(得分:4)

你有两个问题。

  1. 您没有返回已删除的元素,而是使用下一个元素覆盖它并返回该元素。我不认为这是你的意图。
  2. 你的循环范围不对。使用此循环,当n = size() - 1
  3. 时,您将超过索引n + 1的数组边界

    更正后的内容如下:

    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)以删除元素。这看起来更像是一个数组或一个向量。

列表通常由彼此链接的节点组成,在这种情况下,您只需要删除有问题的节点,并使之前的节点指向您要删除的节点之后的节点。