V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
opiviqo
V2EX  ›  C++

C++新手,请教一个循环中创建 list 的问题

  •  
  •   opiviqo · 2020-06-10 10:38:23 +08:00 · 2022 次点击
    这是一个创建于 1606 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我需要在一个循环中不停创建 list,然后把这些 list 放进一个 map 的 value 中。

    while (条件){

    //1.创建 list ;
    //2.放入 map ;
    

    }

    要怎么做呢?如果又更好的方法,也可以告诉我,感谢您的回复

    第 1 条附言  ·  2020-06-10 14:40:30 +08:00
    hello2060 3 小时 39 分钟前 ❤️ 1
    @opiviqo #9
    所以你写出来就对了
    不管是 vector 还是指针,你只要是 new 出来的东西都在堆上,空间不是重合的。
    l00t
        1
    l00t  
       2020-06-10 10:40:17 +08:00
    这问得…… 你不先写写看么?你先写一个
    opiviqo
        2
    opiviqo  
    OP
       2020-06-10 10:41:13 +08:00
    写不出来 while 创建不同的 list,搞不懂
    opiviqo
        3
    opiviqo  
    OP
       2020-06-10 10:41:25 +08:00
    @l00t 写不出来 while 创建不同的 list,搞不懂
    wysnylc
        4
    wysnylc  
       2020-06-10 10:42:26 +08:00
    用 Java Stream 很好写,C++不是很清楚但是应该有差不多的方式
    opiviqo
        5
    opiviqo  
    OP
       2020-06-10 10:42:57 +08:00
    @l00t 那个变量名要怎么随着 while 改变?
    Jacky23333
        6
    Jacky23333  
       2020-06-10 10:44:43 +08:00 via Android   ❤️ 1
    @opiviqo 兄弟,你在 while 里面定义的变量作用域只限于本次循环
    nightwitch
        7
    nightwitch  
       2020-06-10 10:45:09 +08:00
    std::map<int, std::list<int>> map;
    int index = 0;
    while(condition)
    {
    map.emplace({index++,std::list<int>{});
    }
    大概是这样吧?
    araraloren
        8
    araraloren  
       2020-06-10 10:47:47 +08:00   ❤️ 1
    @opiviqo 什么 变量名??你先把自己的想法 写出来 ,我们才能知道你哪里错了。。
    opiviqo
        9
    opiviqo  
    OP
       2020-06-10 10:54:30 +08:00
    @araraloren 每一次执行 while 就创建一个新的 list,然后给 list 赋值,然后给给这个 list 放入到同一个 map 中
    while (条件){
    创建新的 list ; //这里要保证每个 list 又不同的内存空间,因为要存不同的数据;我个人理解就是每次创建的 list 变量名都是不变的有问题;
    list 赋值;
    放入 map
    }
    Tony042
        10
    Tony042  
       2020-06-10 10:56:56 +08:00   ❤️ 1
    @opiviqo 你要是不需要 key value 的话,直接 vector 不更好?
    l00t
        11
    l00t  
       2020-06-10 10:58:00 +08:00   ❤️ 1
    所以说你不先写一下么…… 你不写你怎么知道变量名相同有没有问题呢
    opiviqo
        12
    opiviqo  
    OP
       2020-06-10 10:59:01 +08:00
    @Tony042 有 key 那个 value 就是个 list,boss 要求放 list,我不知道为何,被动执行。
    hello2060
        13
    hello2060  
       2020-06-10 11:00:30 +08:00   ❤️ 1
    @opiviqo #9
    所以你写出来就对了
    不管是 vector 还是指针,你只要是 new 出来的东西都在堆上,空间不是重合的。

    ```
    while () {
    vector<int> v = xxx
    map[x] = v
    }
    ```
    Madcrow
        14
    Madcrow  
       2020-06-10 11:04:31 +08:00 via Android
    放进 map 里会执行一次拷贝构造,所以没有你担心的问题
    Procumbens
        15
    Procumbens  
       2020-06-10 11:05:43 +08:00
    @opiviqo

    在 while 大括号里新定义的 list 每一次都是新的变量
    jmc891205
        16
    jmc891205  
       2020-06-10 11:33:26 +08:00 via iPhone
    loop {
    vector<int> v;
    m[key] = v;
    }
    zycpp
        17
    zycpp  
       2020-06-10 11:57:14 +08:00 via Android
    考虑一下智能指针?
    araraloren
        18
    araraloren  
       2020-06-10 16:50:52 +08:00
    这不是学习没到家么,每一次循环 块内的变量都是不相关的,
    他们是有 相同名字 相同生命周期 但出生在不同时间的 变量
    而且 我现在也不确定你想做的事情能不能写成循环,因为很显然你还没有理解循环是怎么回事。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2853 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 14:28 · PVG 22:28 · LAX 07:28 · JFK 10:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.