【问题标题】:is c++ STL algorithms and containers same across platforms and performance?c++ STL 算法和容器跨平台和性能是否相同?
【发布时间】:2010-03-10 14:29:16
【问题描述】:

在学习了大量的 c++ 之后,我现在进入了 STL 容器和算法模板库,我主要关心的是,

1) 这个库在 MS、linux 和其他操作系统等不同平台上是否相同?

2) 程序 c++ 模块的质量或效率会随着 STL 容器和算法的更多使用而降低,我认为我无法根据所有需求对其进行自定义。

3) 这个模板库好用在linux系统编程,内核模块中吗?

4) 最后我可以在编程比赛中使用它吗,因为它可以减轻很多编码和压力。

【问题讨论】:

  • 我曾经参加过一场比赛,不允许 C++ 程序员使用 STL,因为这对 C 和 Java 程序员来说是不公平的优势:P
  • 请参阅kerneltrap.org/node/2067 以讨论您的第三点。在变成咆哮之前,这实际上是一个有用的讨论。

标签: c++ stl-algorithm stl


【解决方案1】:

1) 这个库在 MS、linux 和其他操作系统等不同平台上是否相同?

没有。除了标准化的接口外,每个编译器套件的实现都是不同的,有时它们还提供自定义扩展,例如hash_map

2) 程序 c++ 模块的质量或效率会随着 STL 容器和算法的更多使用而降低,我认为我无法根据所有需求对其进行自定义。

我不这么认为。质量和效率应该比自己做一个要好得多,除非你有非常特殊的需要。

3) 这个模板库好用在linux系统编程、内核模块中吗?

内核最好使用 C。

4) 最后我可以在编程比赛中使用它吗,因为它可以减轻很多编码和压力。

取决于比赛的规则。

【讨论】:

    【解决方案2】:

    1) 标准(接口)相同。实现方式不同。

    2) 程序的质量或效率仅取决于您的技能。 STL 为您提供可以使用和误用的好处。

    3) 不适用于内核模块,适用于用户模式应用程序。

    4) 通常 C++ 竞赛允许 STL。

    【讨论】:

      【解决方案3】:

      1) API 相同。标准中指定的限制行为(例如 O(n) )。实施供应商特定。意味着您可以依赖应用的扩展。

      2) 只要​​你要问这个问题,你的代码的质量和效率都可能通过使用 STL 来提高。

      3) 不在内核中。

      4) C++ constests 应该允许 STL。

      【讨论】:

      • 其实,我曾经通过从vector切换到C-Style数组有一个改进。
      • 有什么改进?表现?您是否分析了调试或发布版本?
      • 标准中的约束是上限,但在某些情况下,特定的 STL 实现可以生成比其他实现更快的代码(算法上更快的代码)。例子是:vector<vector<int> >::push_back,当从N增加容量时,g++实现会调用vector<int>复制构造函数N次,总共O(N*M)操作(M是内部向量的大小) . Dinkumware 实现(在 VS 中)将在新的更大容器中创建空的 vector<int> 并执行 N 优化的交换操作,成本为 O(N)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-03
      • 2010-12-28
      • 1970-01-01
      • 1970-01-01
      • 2011-07-28
      相关资源
      最近更新 更多