以下代码:
list<int> P;
int i,n,x;
cin>>n>>x;
for(i=0;i<n;i++)
P.push_back(i+1);
list<int>::iterator t2,t1=P.begin();
advance(t1,x-1);
t2=t1;
t1++;
P.erase(t1);
t2++;
cout<<*t2<<" ";
cout<<*(P.end())<<endl;
当我提供的输入是: 5 3 ,
输出为 5 4 。
我实际上是从列表中删除元素4。但它将走到列表的末尾。我该如何避免这种情况?我想从列表中完全删除4,以便列表中的最后一个元素是5。
答案 0 :(得分:6)
C ++的STL中的erase()是否实际删除了元素?
是。 erase
销毁元素。
但它已经到了列表的末尾。
*(P.end())
end
返回结束迭代器。解除引用它具有未定义的行为。您可以使用back
获取最后一个元素。
答案 1 :(得分:0)
当您致电erase()
时,它会删除内部存储空间中的元素。
您可以执行测试的测试是:
int main()
{
vector<int> x = {3, 4, 5, 6};
int * temp = &x[1];
cout<<*temp<<endl;
x.erase(x.begin() + 1);
cout<<*temp<<endl;
}
输出显示:
4
5
显示擦除会移除元素并移动其所有元素。
希望这有帮助。