坑爹dict for C++

2013-09-16 18:05:22 +08:00
 zorceta
https://github.com/zorceta/zict
偷懒没把所有基本类型写完
char*的不清楚怎么写 手上也没有电脑 不能测试
写得挺烂的 希望各位拍砖之余提点建议
3803 次点击
所在节点    分享创造
4 条回复
typing
2013-09-16 18:22:22 +08:00
这是练习作品么?

有一些建议:
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
2013-09-16 18:25:45 +08:00
再补充一下:

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

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

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

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

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

非常感谢你的长回复.对我很有启发^_^
zorceta
2013-09-16 20:36:33 +08:00
上一回复O(1)请无视

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/82674

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX