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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C ++的STL中的erase()实际上是否删除了元素?相关的知识,希望对你有一定的参考价值。

对于以下代码:

 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。

答案

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

是。 erase确实破坏了元素。

但它将走到列表的末尾。

*(P.end())

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

另一答案

当您调用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

这表明擦除删除了元素并移动了其中的所有元素。

希望这可以帮助。

以上是关于C ++的STL中的erase()实际上是否删除了元素?的主要内容,如果未能解决你的问题,请参考以下文章

怎么删除STL容器的元素

C++ stl multiset.erase的误用

C++ stl multiset.erase的误用

c++stl里面的map.erase(...)

c++11中,为啥可以用const_iterator删除map/multimap中的元素

Python中是不是有类似于C++ STL map的结构?