c++不长搞,每次搞都频繁掉进陷阱里。。。
std::set<int> iset;
std::set<int>::iterator it = iset.insert(4).first;
(*it)++; // error. 原因:std::set的迭代器不能修改对应的元素.
这是因为:
std::set的特点是:
1. 对于插入、删除和查找操作,
2. set是一个有序的、可以前向和后向遍历的容器(双向迭代器);
3. set是一个元素类型和比较函数可以配置的容器,但是一经配置,就不可更改;
4. set的元素可以插入、删除,但是不可更改。
set在任何时刻都是一个有序的结构,而一旦破坏这个有序性,set可能表现出非预期的行为。为了保证set的概念完整性,C++STL厉
行规定了3和4两个限制,在绝大部分情况下,这两个限制是合理的。
#include <set>
template<class T>
inline T & GetStdSetElement(std::_Rb_tree_const_iterator<T> std_set_iterator)
{
return *(T *)&(*std_set_iterator);
}
int main()
{
using namespace std;
set<int> iset;
pair< set<int>::iterator, bool> res = iset.insert(4);
int & i = GetStdSetElement(res.first);
i++;
cout << *( iset.begin() ) << endl;
return 0;
}
原文链接: https://www.cnblogs.com/xiaouisme/archive/2012/10/12/2721652.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/65616
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!