我正在C++中进行练习,我正试图理解如何从列表中移除一个元素,并将其余部分移到左侧。我想知道是否有一个整洁的解决方案。这里是我的版本,似乎做的工作,但我有一种感觉,有一种更好的方法:从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();
}
}
列表不需要是链接列表。使用数组作为后端结构是可以接受的。 – 2012-07-29 18:59:07
即使假设'List'只能表示一个链表(为什么,[skiplist](http://en.wikipedia.org/wiki/Skiplist)或[arraylist](http:// en.wikipedia.org/wiki/Arraylist)?)由于O(n)查找,链表不会因为任意元素而删除O(1)。 – Grizzly 2012-07-29 19:02:56
@Grizzly是的,但我假设你已经有一个指向正在被删除的节点的指针。在这种情况下,它将是'begin()+ n'。 – 2012-07-29 19:03:39