加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 在插入新元素时,我们如何迭代集合的所有元素?

发布时间:2020-12-16 04:58:33 所属栏目:百科 来源:网络整理
导读:考虑一下: // set_iterator.cpp : Defines the entry point for the console application.#include "stdafx.h"#include iostream#include setusing namespace std;int _tmain(int argc,_TCHAR* argv[]){ setint a1; setint a2; a1.insert(3); a1.insert(4);
考虑一下:
// set_iterator.cpp : Defines the entry point for the console application.

#include "stdafx.h"
#include <iostream>
#include <set>

using namespace std;

int _tmain(int argc,_TCHAR* argv[])
{
    set<int> a1;
    set<int> a2;

    a1.insert(3);
    a1.insert(4);
    a1.insert(5);
    a2.insert(1);
    a2.insert(2);
    a2.insert(6);

    set<int>::iterator iter;
    int x = 0;
    for (iter = a1.begin(); iter != a1.end(); ++iter)
    {
        if (x == 0) {
            x = 1;
            a1.insert(a2.begin(),a2.end());
        }
        cout << *iter << endl;
    }

    system("pause");

    return 0;
}

目标是访问集合中的每个元素一次.我认为在将元素插入a1后,迭代器无效.

输出是
3 4 5 6

1,2不打印.

我们如何编码这样的情况.

解决方法

实际上,迭代器仍然有效.集合是基于节点的容器.

问题是在一个集合中,元素总是被排序.在插入之前,您的设置如下所示:

3 4 5
^
iter

插入后,您的设置如下所示:

1 2 3 4 5 6
    ^
    iter

如果您希望能够做您正在做的事情,您将不得不使用不同的容器.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读