initialzer_list 怎么实现类似 map 的列表传参? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fyyz
V2EX    C

initialzer_list 怎么实现类似 map 的列表传参?

  •  
  •   fyyz 2016-06-29 11:51:36 +08:00 2163 次点击
    这是一个创建于 3442 天前的主题,其中的信息可能已经有所发展或是发生改变。

    标题里不大讲得清楚,所以就在这里详细说一下。

    先看看 map 列表赋值:

    map<char,string> escape_map = { {'1',"11"}, {'2',"22"}, {'3',"33"}, }; 

    我知道 map 内部的元素其实是 pair<T1,T2>,现在我也想自己实现一个类似的玩意,细节是这样的(不是原始需求,为了说清楚做了改动)。

    首先有一个 class :

    class book { string bookname; double price; string author; }; 

    然后我需要实现一个函数,通过列表传参把这些 book object 写入一个 list 。

    class book { string bookname; double price; string author; }; list<book> book_list; void add_book(initialzer_list<book> _book_list) { //这里卡住了 //如何把 initialzer_list 里的花括号括起来的元素转变成 book object ? //就像 map 的 initialzer_list 里把花括号里的元素转变为 pair? } add_book( {"book1",1,"author1"}, {"book2",2,"author2"}, ); 
    8 条回复    2016-06-29 15:05:42 +08:00
    SuperFashi
        1
    SuperFashi  
       2016-06-29 12:27:38 +08:00 via Android
    fyyz
        2
    fyyz  
    OP
       2016-06-29 12:52:51 +08:00
    @SuperFashi
    可能是我没表达清楚。

    我说的是,假如说有一个 initialzer_list ,内部都是一个个花括号扩起来的元素,如何把这些花括号括起来的元素转变成 class 的实例化。
    jasonlz
        4
    jasonlz  
       2016-06-29 13:59:29 +08:00
    首先是 initializer_list ,拼写错误。
    然后 initializer_list<T> 花括号里的值是需要实例化的,你的需求是用未实例化的 initializer_list<T>来实例化每个 T 元素?这显然是违规操作。
    不知道你的目的是什么,如果是想通过 initializer_list 来初始化一组 T ,你可以这样:
    class book
    {
    string bookname;
    double price;
    string author;
    public:
    book(string _bookname, double _price, string _author):
    bookname(_bookname), price(_price), author(_author) {}
    };

    list<book> book_list{
    new book("book1",1,"author1"),
    new book("book2",2,"author2") };
    fyyz
        5
    fyyz  
    OP
       2016-06-29 14:24:06 +08:00
    @Archangel_SDY 谢谢你提供的范例,很简洁易懂 :)
    fyyz
        6
    fyyz  
    OP
       2016-06-29 14:58:57 +08:00
    @jasonlz 看一楼,我就是想用类似于 map 的方式来实现自己的函数。
    fyyz
        7
    fyyz  
    OP
       2016-06-29 15:01:03 +08:00
    @Archangel_SDY @jasonlz
    看了你们两个的范例,明白了,就是用构造函数。
    SuperFashi
        8
    SuperFashi  
       2016-06-29 15:05:42 +08:00 via Android
    @fyyz
    我说的是,你去看看那个网页下面有样例代码,如果你非要用 initializer_list 的话。

    还有,对于 class 的初始化完全可以直接用 4 楼的方式写出来,而且如果是 public 的话可以直接用(book){"book1", 1, "author1"}这种方式建立实例,然后用对 list 的普通操作例如 insert 或者 push_back 放到 book_list 里面。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4705 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 09:56 PVG 17:56 LAX 01:56 JFK 04:56
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86