要实现的最简单 C++11 容器是什么?

What's the simplest C++11 container to implement?

本文关键字:是什么 C++11 实现 最简单      更新时间:2023-10-16

我想尝试写自己的容器,就像练习一样,我的目标是生产可以根据C 11标准工作的东西,而我'M还试图避免诸如链接列表之类的微不足道和效率低下的实现。

我想要关于最简单和更少的详细容器实现的输入,在C 11标准的哪一部分中,我可以找到标准本身所需的功能的描述。

您可能想从std::array开始,这基本上是类固醇上的C风格数组。

您可能需要先实现基础知识,例如beginendconst和反向版本可以稍后出现),operator[]和大小功能。

beginend开始,因为:

  • 与他们一起,您可以立即使用一些标准算法。
  • 范围for和使用迭代器进行手动迭代

供参考,您可以在此处获得C 11标准,这是我从确定的C 书籍指南和列表中获得的链接。特定章节将为23,"容器库"/[容器]。

但是,C 标准充满了标准样式,并且经常围绕其许多其他部分链接,这使得阅读它是一种痛苦的痛苦。您可能需要首先从CPPReference开始,它提供了标准库中几乎所有内容的准确描述。

强有力的建议:阅读Bjarne Stroustrup的最后两本书:"编程:使用C 的原理和实践"或" C 的旅行"。

在这两本书中,他都会通过创建自己的"矢量"容器来带领您。这是一项有益的练习。

最简单的可能是 std::array。第二可能是std::vector,它相似,但添加了push_backpop_back和(更重要的是)所有内部代码以根据需要扩展分配。

关于难度的水平:它们的工作比您最初可能预期的要多。不过,很大程度上取决于您的方法。您可以采用一种相当简单的方法,其中包含相当数量的近乎借助的方法(例如,在iteratorreverse_iteratorconst_iteratorconst_reverse_iterator之间),或者您可以以更棘手的代价来消除大部分重复。

有关参考文献:您主要查看标准的§23.2和23.3。23.2一般包含对容器的要求(大多数适用于arrayvector),而23.3包含特定于序列容器的要求(数组,矢量,Deque,Deque,List,forward_list)。

尝试做类似std :: vector之类的事情。下面的容器将是:

T* someArray

您根据需要分配数组;创建访问器功能等。当数组填充时,您必须分配一个新数组(通常是原始大小的两倍),然后将元素从原始数组复制到它。

我假设您只想尝试一些东西。不必弄乱std ::分配器等。

做一个简单的动态阵列将有助于您深入了解这些类型的容器如何在引擎盖下工作。