微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

设置插入迭代器超出范围

如何解决设置插入迭代器超出范围

当我在下面运行以下代码时,我的程序崩溃了:

    std::set<int> m_set = {1,2,3,4,5 };
    
    std::set<int>::iterator setIt = m_set.begin();
    
    ++setIt;

    m_set.erase(setIt);

    m_set.insert(setIt,25);

我有一个std :: set,由对象Point填充。该代码成功编译,但在m_set.insert(setIt,25)处崩溃。我该怎么做才能解决?谢谢!

解决方法

根据您的评论,我认为您对std::set有点误解。我认为您正在尝试像在std::vectorstd::array中那样替换元素。

但是集合是一个 sorted 集合,您不能只取出一个元素,然后将另一个元素放到完全相同的位置,因为很可能以后不会对其进行排序。

当您插入任何内容时,需要找到新元素的正确位置。 set.insert的第一个参数可以在这里提供帮助。这是从哪里开始寻找这个正确地点的提示。

但这只是一个提示,它不会以任何方式影响元素的最终位置。给出“好”提示可以加快插入速度,给出“差”的提示可以减慢插入速度,但是无论如何该元素最终都将停留在同一位置。

另一个问题是,erase将使迭代器无效,即,此后不允许您使用此迭代器。

只需使用

m_set.insert(25);

元素将被放置在正确的位置。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。