0

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

更多信息:我是初学者。

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

4

5 回答 5

3

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

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

于 2021-02-18T09:20:55.280 回答
1

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

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

于 2021-02-18T09:25:13.667 回答
0

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

它可能是。

我对容器的理解是templateC++ 代码中的 -s

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

一个典型的例子是数值科学计算,涉及在各种数字(-s,还有bignums )上表示巨大的数学对称三角形或对角线或稀疏(等)矩阵。想想有限元方法计算。float

opencvtemplate库是一个使用-s的计算机视觉开源 C++ 库。下载它的源代码并研究它。

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

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

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

Qt 图形工具包是用 C++ 编码的,是开源的,并且有template-s。

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

Wt Web 工具包是用 C++ 编码的,是开源的,并且使用template-s。您可以下载并研究它的源代码。我的观点是它有专门的容器。

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

第三个例子是垃圾收集支持。RefPerSys项目有模板...

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

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

另请参阅Autosar MISRA C++ 编码指南

于 2021-02-18T09:47:17.840 回答
0

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

于 2021-02-18T09:40:21.550 回答
0

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

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

于 2021-02-18T09:28:07.283 回答