标签:advance 访问 两种 注意 val 对象 ini begin --
链表这一种数据结构很常见,拥有良好的动态操作性能,比如插入,删除,但是对于静态操作,比如随机访问不太友好,链表的访问只能通过迭代器来查找。
这次主要说明一下链表的删除,其中有两种删除方式分别为:name.erase(const_iterator __first, const_iterator __last)和name.remove(const int &__value)。
从中可以看出,erase针对的是迭代器,也就是一个地址指针,并在删除后返回迭代器的下一个,所以要注意迭代器的范围;
而remove则是删除对象是节点里对应的值value,若有多个节点的value都为删除目标,则这些节点全部都删除,所有remove是先查找,再删除,其中查找也是用到了迭代器。
下面是一个循环删除节点的程序。
`
class Solution {
public:
int LastRemaining_Solution(int n, int m)
{
if(n<=0)
return -1;
int temp=0;;
list
for(int i=0;i<n;i++)
L.push_back(i);
while(n>1){
temp=(temp+m-1)%n;
list
advance(it, temp);
L.erase(it);
n--;
}
return L.front();
}
};
`
标签:advance 访问 两种 注意 val 对象 ini begin --
原文地址:https://www.cnblogs.com/fpf123/p/13341026.html