面对删除集合中最后一个元素的问题:
#include <bits/stdc++.h>
using namespace std;
int main()
{
set < pair <int,int > > a;
a.insert(make_pair(2,3));
auto it = a.rbegin();
a.erase(it.base()); // for deleting last element in set
cout << a.size() << endl;
return 0;
}
获取运行时问题,同时尝试了自动,迭代器和常量迭代器,它&#39 ; s不工作。有没有其他方法可以擦除一组中的元素?
编辑:如何根据迭代器引用删除特定元素? 如果我喜欢:
auto it=a.begin();
a.erase(it); Here it = reference to the element for deletion
它没有用。任何其他基于迭代器引用的删除方式?
答案 0 :(得分:3)
还有其他方法可以从集合中删除元素吗?
a.erase(std::prev(std::end(a)));
你能告诉我,我的代码有什么问题吗?
itr.base()
其中itr == a.begin()
相当于a.end()
。请参阅:http://en.cppreference.com/w/cpp/iterator/reverse_iterator/base
删除过去的迭代器是未定义的行为。