V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
zorceta
V2EX  ›  分享创造

坑爹dict for C++

  •  
  •   zorceta · 2013-09-16 18:05:22 +08:00 via Android · 3786 次点击
    这是一个创建于 4086 天前的主题,其中的信息可能已经有所发展或是发生改变。
    https://github.com/zorceta/zict
    偷懒没把所有基本类型写完
    char*的不清楚怎么写 手上也没有电脑 不能测试
    写得挺烂的 希望各位拍砖之余提点建议
    4 条回复    1970-01-01 08:00:00 +08:00
    typing
        1
    typing  
       2013-09-16 18:22:22 +08:00   ❤️ 2
    这是练习作品么?

    有一些建议:
    1. 复杂度. 目前是O(n), 试试看能不能更快.
    2. 有时候operator[]只是提领操作, 尤其对于const dict. 所以operator[]是不是提供一个const版本更好.
    3. (这一点我也不太清楚, 需要你自己查证) 一般来说.h里面的函数都要inline, 有两种方法可以达到:
    直接在class体内定义; 或者自己手动加inline.
    目前这样子会导致函数重复定义(在.h包含多次的情况下)
    4. 承接上一条. 一般.h头部需要加上#ifdef那样的预编译指令, 防治多次包含的情况.
    5. assignment operator 一般都会返回一个const reference. 这只是惯例, 并不是错误.
    6. 我想你需要写一些注释来阐明你对拷贝所使用的策略.(deep or shallow, reference or hold)
    7. 你可以看看STL中map的写法, 会有很大帮助.
    typing
        2
    typing  
       2013-09-16 18:25:45 +08:00   ❤️ 1
    再补充一下:

    8. 不要在.h的全局空间using; 这样会导致std::string暴露给所有使用这个.h的编译单元.
    zorceta
        3
    zorceta  
    OP
       2013-09-16 20:15:18 +08:00 via Android
    @typing
    确实是练习 C++没有深入学习和大量练习 只是粗读了一遍Premier Plus

    O(1)看起来好有难度的样子...

    const版本,重复定义和std::string是因为手机上敲的没考虑周全

    拷贝策略这么高深的东西...在所有内置类型写完后会加上的

    关于std::map,我是因为Premier Plus上map的范例都是同类型赋值,想写个类似Python的dict.会看的.

    非常感谢你的长回复.对我很有启发^_^
    zorceta
        4
    zorceta  
    OP
       2013-09-16 20:36:33 +08:00 via Android
    上一回复O(1)请无视
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2768 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 06:15 · PVG 14:15 · LAX 22:15 · JFK 01:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.