【问题标题】:Creating containers c++ [closed]创建容器 C++ [关闭]
【发布时间】:2021-02-18 09:12:54
【问题描述】:

我想知道创建自己的容器是否非常有用?有一些容器已经用 C++ 实现了,但是创建自己的容器有什么好处?

更多信息:我是初学者。

编辑:谁能给我一个标准库容器不能做的例子吗?

【问题讨论】:

  • 如果 标准库 附带的 容器 不适合您的目的,那么您可以创建自己的,或使用第 3 方提供您想要的内容的库。但是创建高效的容器相当困难,通常需要先进的技术。
  • 假设您已准备好完成任务,那么创建自己的容器将是一个非常有用的学习练习。
  • 能否请edit您的问题用书面英语定义什么是适合您的容器?见this C++ reference?它与template 关键字有关吗?也许你的问题变成了:“template-s 在 C++ 中什么时候有用?”

标签: c++ stl containers


【解决方案1】:

如果您的目的是了解容器和 C++,那么请继续尝试实现它们。如果您只想使用一个容器,并且它存在于标准库、boost 或项目中的其他一些知名库中,只需使用库版本即可。它可能会经过很好的测试和优化。其他程序员也可能比您自己推出的东西更熟悉该容器。

经验法则是,重用代码,除非您可以做得更好并且可以证明相关成本是合理的。

【讨论】:

  • 注意:Visual C++ 上的容器看起来很慢,但前提是你在调试模式下编译程序
  • @user253751 这可能是因为他们会在调试版本中进行边界检查,但无论如何这对于调试都无关紧要。
  • 让人觉得标准库很慢。
  • @user253751 在调试中一切都很慢,这不是标准容器的缺点
【解决方案2】:

如果您想学习如何编程,或了解容器的工作原理,或与它们相关的一切,那么您自己的容器实现是一个很好的做法。

但是,大公司也经常使用自己的容器,因为他们可能认为标准容器和算法对于他们自己的任务来说不是最佳的。

【讨论】:

    【解决方案3】:

    Boost 中有几个非标准容器,例如 Boost.ContainerBoost Graph Library 中的容器,因此 STL 肯定有一些领域没有涵盖。

    一般来说,从std::vector 开始,如果不符合您的要求,请检查其他 STL 容器。

    【讨论】:

      【解决方案4】:

      C++ 标准库是 C++ 编程语言的通用库。 In 的设计足以应付您在工作中可能遇到的大多数任务。但有时可能会发现标准库中的某些容器不符合您的需求。当您可以实现自己的某个容器版本时就是这种情况,因为标准库不能完全满足您工作期间可能出现的所有需求。

      【讨论】:

        【解决方案5】:

        我想知道创建自己的容器是否很有用?

        有可能。

        我对容器的理解是template-s in C++ code

        一个简单的例子是矩阵。您可能想开发自己的template<unsigned Height,unsigned Width,typeclass ElementType> class Matrix,您肯定会称其为容器。请记住,多项式矩阵在数学中是有意义的。

        一个典型的例子是数值科学计算,与在各种数字上表示巨大的数学symmetricaltriangular或对角线或sparse(等等...)matrixes有关(float-s,还有bignums)。想想finite element methods 计算。

        opencv 库是计算机视觉的开源 C++ 库,它使用 template-s。下载它的源代码并学习它。

        另一个例子是一些使用OpenCL(如果可用)的重型 C++ 软件。

        有效地在内存中表示小于某个给定N的整数之间的mathematical permutation。您可能希望将其表示为您自己的template 中的两个std::vectors(一个用于直接映射,另一个用于反向映射)。

        C++ 中的一些通用 parsing 库大量使用模板。

        Qt graphical toolkit 是用 C++ 编码的,是开源的,并且有 template-s。

        tensorflow 机器学习库具有开源 C++ 代码,带有template-s。

        Wt web toolkit 是用 C++ 编码的,是开源的,使用 template-s。您可以下载并研究它的源代码。我的看法是它有专门的容器。

        GCC 编译器主要使用 C++ 编码,是免费软件,使用template-s。您可以下载并研究它的源代码。我的看法是它有专门的容器。

        第三个例子是garbage collection 支持。 RefPerSys 项目有模板...

        第四个例子可能与将 C++ 容器存储在数据库中有关(如 PostgreSQL

        不要忘记另一种方法:从更高级别的描述生成 C++ 代码(如 SWIGANTLR 所做的)。请注意rule of five

        另见Autosar MISRA C++ coding guidelines

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-07-12
          • 1970-01-01
          • 1970-01-01
          • 2015-01-23
          • 2010-09-23
          相关资源
          最近更新 更多