要实现的最简单 C++11 容器是什么?
What's the simplest C++11 container to implement?
我想尝试写自己的容器,就像练习一样,我的目标是生产可以根据C 11标准工作的东西,而我'M还试图避免诸如链接列表之类的微不足道和效率低下的实现。
我想要关于最简单和更少的详细容器实现的输入,在C 11标准的哪一部分中,我可以找到标准本身所需的功能的描述。
您可能想从std::array
开始,这基本上是类固醇上的C风格数组。
您可能需要先实现基础知识,例如begin
和end
(const
和反向版本可以稍后出现),operator[]
和大小功能。
从begin
和end
开始,因为:
- 与他们一起,您可以立即使用一些标准算法。
- 范围for和使用迭代器进行手动迭代
供参考,您可以在此处获得C 11标准,这是我从确定的C 书籍指南和列表中获得的链接。特定章节将为23,"容器库"/[容器]。
但是,C 标准充满了标准样式,并且经常围绕其许多其他部分链接,这使得阅读它是一种痛苦的痛苦。您可能需要首先从CPPReference开始,它提供了标准库中几乎所有内容的准确描述。
强有力的建议:阅读Bjarne Stroustrup的最后两本书:"编程:使用C 的原理和实践"或" C 的旅行"。
在这两本书中,他都会通过创建自己的"矢量"容器来带领您。这是一项有益的练习。
最简单的可能是 std::array
。第二可能是std::vector
,它相似,但添加了push_back
,pop_back
和(更重要的是)所有内部代码以根据需要扩展分配。
关于难度的水平:它们的工作比您最初可能预期的要多。不过,很大程度上取决于您的方法。您可以采用一种相当简单的方法,其中包含相当数量的近乎借助的方法(例如,在iterator
,reverse_iterator
,const_iterator
和const_reverse_iterator
之间),或者您可以以更棘手的代价来消除大部分重复。
有关参考文献:您主要查看标准的§23.2和23.3。23.2一般包含对容器的要求(大多数适用于array
和vector
),而23.3包含特定于序列容器的要求(数组,矢量,Deque,Deque,List,forward_list)。
尝试做类似std :: vector之类的事情。下面的容器将是:
T* someArray
您根据需要分配数组;创建访问器功能等。当数组填充时,您必须分配一个新数组(通常是原始大小的两倍),然后将元素从原始数组复制到它。
我假设您只想尝试一些东西。不必弄乱std ::分配器等。
做一个简单的动态阵列将有助于您深入了解这些类型的容器如何在引擎盖下工作。
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 无法访问的代码 在 C++11 中,可能导致这种情况的原因是什么?
- C 11中的标准方法是什么,可以访问std :: vector中元素n的指针
- 在 C++11 中表示日内时间 HH:MM:SS 的最佳方法是什么?
- C 11中成员函数的值类别属性是什么?
- C++11 中的默认正则表达式引擎是什么?
- 在 C++11 中获取当前时间的最快方法是什么
- -> 在函数签名中的 c++11 中是什么意思?
- C 11-将变量初始化为参考是什么意思
- 在C#WPF应用程序中使用C++11库的选项是什么
- 缩小 C++11 中的转换范围:"actual value after conversion"是什么?
- 在C 11中具有哈希地图结构的最直接侵略是什么
- 要实现的最简单 C++11 容器是什么?
- 在 C++11 中,获取系统即时报价/时间的最快方法是什么?
- 在C++11类型推理过程中,控制优先级的规则是什么
- 在C++11中,推荐的对齐内存的方法是什么
- C++11标准中的核心常量表达式是什么
- 在没有c++11的情况下,擦除映射中最后插入的元素的正确方法是什么
- C++11 中的thread_local是什么意思
- C++11 中的"auto var = {condition} ? 1 : 1.0"是什么类型?是双精度还是整数?