C++的STL中的erase()实际上是否删除了元素?

Tan*_*nay 0 c++ stl

对于以下代码:

 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;
Run Code Online (Sandbox Code Playgroud)

当我给出的输入是:5 3,

输出量为5 4.

我实际上是从列表中删除元素4.但它将走到列表的末尾.我该如何避免这种情况?我想从列表中完全删除4,以便列表中的最后一个元素是5.

eer*_*ika 6

C++的STL中的erase()实际上是否删除了元素?

是.erase确实破坏了元素.

但它将走到列表的末尾.

*(P.end())
Run Code Online (Sandbox Code Playgroud)

end返回结束迭代器.解除引用它具有未定义的行为.您可以使用back获取最后一个元素.