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

时间:2014-01-27 06:24:02

标签: c++ c++11

我想尝试编写自己的容器,就像练习一样,我的目标是生成一些符合C ++ 11标准的东西,而且我也试图避免琐碎和低效实现像链接列表。

我想要一个关于什么是最简单和更简洁的容器的输入以及在C ++ 11标准的哪个部分我可以找到标准本身所需的功能的描述。

4 个答案:

答案 0 :(得分:9)

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

您可能希望首先实现基础知识,例如beginendconst和反向版本可以稍后出现),operator[]和尺寸函数。

beginend开始,因为:

  • 使用它们,您可以立即使用一些标准算法。
  • range-for和使用迭代器进行手动迭代

作为参考,您可以获取C++11 standard here,这是我从The Definitive C++ Book Guide and List获得的链接。具体章节将是第23号“容器库”/ [容器]。

但是C ++标准充满了标准,并且经常链接到它的许多其他部分,这使得线性阅读成为一种痛苦。您可能希望首先从cppreference开始,它提供了标准库中几乎所有内容的准确描述。

答案 1 :(得分:8)

强烈建议:阅读Bjarne Stroustrup最后两本书中的任何一本:“编程:使用C ++的原理和实践”,或“C ++之旅”。

在这两本书中,他将引导您创建自己的“矢量”容器。这是一个信息丰富的练习。

答案 2 :(得分:6)

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

关于难度级别:他们的工作量比你最初预期的要多。虽然有点取决于你的方法。您可以采用一种包含大量近似重复的相当简单的方法(例如,在iteratorreverse_iteratorconst_iteratorconst_reverse_iterator之间,或者您可以消除大部分重复的代价是代码有点棘手。

供参考:您主要关注标准的§23.2和23.3。 23.2包含一般容器的要求(大多数适用于arrayvector),23.3包含特定于序列容器的要求(数组,向量,双端队列,列表,forward_list)。

答案 3 :(得分:1)

尝试做类似std :: vector的事情。底层容器将类似于:

T* someArray

根据需要分配数组;当数组填满时你必须分配一个新数组(通常是原始大小的两倍),然后将orig数组中的元素复制到它。

我假设你只是想要尝试一些东西;不必乱用std :: allocators等。

执行一个简单的动态数组将帮助您深入了解这些容器如何在引擎盖下工作。