首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >到STL或!STL,这就是问题所在

到STL或!STL,这就是问题所在
EN

Stack Overflow用户
提问于 2008-10-06 14:17:08
回答 15查看 7.2K关注 0票数 41

毫无疑问,对于大多数C++编程项目,我都会选择使用STL。然而,最近我遇到了一个问题,“有没有什么情况下你不会使用STL?”

我越想,我就越意识到也许在某些情况下我应该选择不使用STL……例如,一个非常大的长期项目,其代码库预计将持续数年……也许一个完全符合项目需求的自定义容器解决方案值得最初的开销?你是怎么想的,有没有什么情况下你会选择不使用STL?

EN

回答 15

Stack Overflow用户

回答已采纳

发布于 2008-10-06 15:21:19

具有严格内存要求的项目(如嵌入式系统)可能不适合使用STL,因为很难控制和管理从堆中取出和返回到堆中的内容。正如Evan提到的,编写适当的分配器可以帮助解决这一问题,但如果您正在计算使用的每个字节或关注内存碎片,更明智的做法可能是手动编写一个针对特定问题量身定做的解决方案,因为STL已经针对最常见的用法进行了优化。

您还可以选择在特定情况下不使用STL,因为存在更多不在当前标准中的适用容器,例如boost::array或boost::unordered_map。

票数 32
EN

Stack Overflow用户

发布于 2008-10-06 14:29:00

不使用STL的主要原因是:

  1. 您的C++实现很旧,而且模板支持很糟糕。
  2. 您不能使用动态内存分配。

在实践中,这两者都是非常罕见的需求。

对于一个长期项目来说,滚动您自己的与STL在功能上重叠的容器只会增加维护和开发成本。

票数 47
EN

Stack Overflow用户

发布于 2008-10-06 14:33:13

使用stl有很多优点。对于一个长期项目来说,收益大于成本。

  1. 新程序员能够从一开始就理解容器,让他们有更多的时间学习项目中的其他代码。(假设他们已经像任何有能力的C++程序员一样知道STL )
  2. 修复容器中的bug会浪费本可以用来增强业务逻辑的时间。
  3. 很可能你不会编写它们,因为STL无论如何都是实现的。

也就是说,STL容器根本不处理并发。因此,在需要并发的环境中,我会使用其他容器,如Intel TBB并发容器。它们使用细粒度锁定进行了更高级的处理,这样不同的线程就可以并发地修改容器,而不必序列化对容器的访问。

票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/174449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档