deque ---

iamnobody 2011-11-23 03:11:31
刚完成的my::deque<>;使用方法跟stl里面的std::deque<> 一样。只是放在my名字空间中。
本deque<>的迭代器可能会随着deque的增长而失效,与std::vector 相似,与std::deque不同。
牺牲迭代器的失效后得到可观的效率,让deque不再慢吞吞的。
还提供了reserve()函数。可以预分配所需的空间。访问效率和push_back,push_front的效率接近可能超过std::vector<>;
注:本deque异常处理方面不太给力。

抄了不少stl的内容,很多写法想写自己的风格,但是后来又发现的确是stl的实现考虑得更加周到。

欢迎围观,灌水,参考,复制,贴标准,指出错误,纯顶。。。


个人见解。。。期待指正。。。

链接:
my::deque

为什么我还不能散300分。。。不是升了星星就可以散300分了吗?

...全文
323 39 打赏 收藏 转发到动态 举报
写回复
用AI写文章
39 条回复
切换为时间正序
请发表友善的回复…
发表回复
iamnobody 2011-11-25
  • 打赏
  • 举报
回复
同学们,已经更新了。新的版本迭代器失效方面有与std::deque一样的保证。。。yeah..


本人想超越stl,但是不是现在。现在这个作品只不过是因为工司的实习安排在明年。自己无聊写着玩的。
飞天御剑流 2011-11-25
  • 打赏
  • 举报
回复
[Quote=引用 36 楼 mingliang1212 的回复:]
引用 33 楼 supermegaboy 的回复:
想超越STL的设计师是困难的,是需要勇气的。因为这些人通常不仅仅是算法大师,一般还是系统大师和语言大师,而我们,能做到其中一种已经很了不起了。

所以,如果想做一个跟STL功能一样的轮子,直接使用STL是明智的。

我认同您的说法。但是还是要说下:

stl要考虑它的通用性,在某些方面牺牲了效率。比如说,每次插入元素都会跟max_s……
[/Quote]
如果不跟最大值比较,你希望STL怎么做?特别是Size随时被改变的情况下。

而对于实际的大小应该取多大,这个度量非常微妙,它不仅仅是一个经验值,更不仅仅与算法和软件开发技术有关,它甚至能扯上概率论和数值分析,它不是我们坐在电脑前冥想两小时做个估计"应该是这个值吧"就能作出的决定,所以,写个跟STL表面功能相同的东西很容易,但是要做到它那样的合理性、均衡性、考虑问题的周全是很难的,因为涉及的知识太多、太广泛了,我的数学不好,难以给出一个很具合理性的答案。
iamnobody 2011-11-25
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 supermegaboy 的回复:]
想超越STL的设计师是困难的,是需要勇气的。因为这些人通常不仅仅是算法大师,一般还是系统大师和语言大师,而我们,能做到其中一种已经很了不起了。

所以,如果想做一个跟STL功能一样的轮子,直接使用STL是明智的。
[/Quote]
我认同您的说法。但是还是要说下:

stl要考虑它的通用性,在某些方面牺牲了效率。比如说,每次插入元素都会跟max_size();相比较,看他是否超过最大值。但是这个数是size_type(-1)。显然绝大多数的场合都是不必要的比较。

stl并不是完美的。有个地方我一直很不解:
#define _DEQUESIZ (sizeof (value_type) <= 1 ? 16 \
: sizeof (value_type) <= 2 ? 8 \
: sizeof (value_type) <= 4 ? 4 \
: sizeof (value_type) <= 8 ? 2 \
: 1)


这个是我编译器上的实现的deque的_DEQUESIZ (也就是每个数组的大小);
个人认为这太小了吧。。一个int类型deque每增大四个元素就要新分配一块内存。造成在数据量大(或者数据大)时效率极低。个人感觉这是个很不合适的大小。

请指教。
czstemp 2011-11-24
  • 打赏
  • 举报
回复
希望你的my::deque能支持RTTI
zhao1zhong6 2011-11-24
  • 打赏
  • 举报
回复
说归说,看来兄弟是有几年c++功底的。
dic_008 2011-11-23
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 anyidan 的回复:]
引用 9 楼 maoxing63570 的回复:
引用 2 楼 dizuo 的回复:

支持了,你还可以追加100分吧。

要二星


再发一帖还可散 200!
[/Quote]
++
Snight 2011-11-23
  • 打赏
  • 举报
回复
强烈支持原创
zhao1zhong6 2011-11-23
  • 打赏
  • 举报
回复
我是来踢场子的,竟然有public 成员,缺少错误检查,没必要重载+ - ++ 那些玩意儿,销毁元素在哪里?
迭代器不内置?
ouyh12345 2011-11-23
  • 打赏
  • 举报
回复
支持共享
simple_blue 2011-11-23
  • 打赏
  • 举报
回复
我也抄一下你的,
飞天御剑流 2011-11-23
  • 打赏
  • 举报
回复
想超越STL的设计师是困难的,是需要勇气的。因为这些人通常不仅仅是算法大师,一般还是系统大师和语言大师,而我们,能做到其中一种已经很了不起了。

所以,如果想做一个跟STL功能一样的轮子,直接使用STL是明智的。
自由 2011-11-23
  • 打赏
  • 举报
回复
试了下,效率确实挺高的
自由 2011-11-23
  • 打赏
  • 举报
回复
楼主精神可嘉哇~
jixiang1983 2011-11-23
  • 打赏
  • 举报
回复
LZ散分,来支持了...
healer_kx 2011-11-23
  • 打赏
  • 举报
回复
[Quote=引用楼主 mingliang1212 的回复:]
刚完成的my::deque<>;使用方法跟stl里面的std::deque<> 一样。只是放在my名字空间中。
本deque<>的迭代器可能会随着deque的增长而失效,与std::vector 相似,与std::deque不同。
牺牲迭代器的失效后得到可观的效率,让deque不再慢吞吞的。
还提供了reserve()函数。可以预分配所需的空间。访问效率和push_back,push_fro……
[/Quote]


挺好~给我其中50分即可~
zzcmx2008 2011-11-23
  • 打赏
  • 举报
回复
3到8楼的怎么都没有了
無_1024 2011-11-23
  • 打赏
  • 举报
回复
不错不错
zzcmx2008 2011-11-23
  • 打赏
  • 举报
回复
支 持
AnYidan 2011-11-23
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 maoxing63570 的回复:]
引用 2 楼 dizuo 的回复:

支持了,你还可以追加100分吧。

要二星
[/Quote]

再发一帖还可散 200!
maoxing63570 2011-11-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dizuo 的回复:]

支持了,你还可以追加100分吧。
[/Quote]
要二星
加载更多回复(10)

64,685

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧