版权所有 © 2001-2004 Nicolai M. Josuttis
版权所有 © 2012 Marshall Clow
在 Boost 软件许可版本 1.0 下发布。(请参阅随附的文件 LICENSE_1_0.txt
或在 https://boost.ac.cn/LICENSE_1_0.txt 复制)
C++ 标准模板库 STL 作为 C++ 标准库的一部分,为处理不同类型的容器上的算法提供了一个框架。然而,普通数组没有提供 STL 容器的接口(尽管它们提供了 STL 容器的迭代器接口)。
作为普通数组的替代品,STL 提供了类 std::vector
。但是,std::vector<>
提供了动态数组的语义。因此,它可以管理数据以能够更改元素的数量。如果只需要静态大小的数组,这将导致一些开销。
在他的书《泛型编程与 STL》中,Matthew H. Austern 介绍了一个有用的静态大小普通数组的包装类,称为 block
。它比普通数组更安全,并且没有更差的性能。在《C++ 编程语言》第 3 版中,Bjarne Stroustrup 介绍了一个类似的类,称为 c_array
,我(Nicolai Josuttis)在我的书《C++ 标准库 - 教程与参考》中稍作修改后呈现,称为 carray
。这是这些方法的精髓,并从 boost 得到了许多反馈。
在考虑了不同的名称之后,我们决定将这个类简单地命名为 array
。
请注意,建议将此类作为下一个技术报告的一部分,该报告将扩展 C++ 标准(请参阅 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1548.htm)。
更新:std::array
(从 C++11 开始)是 C++ 标准的一部分。boost::array
和 std::array
之间的差异很小。如果您正在使用 C++11,则应考虑使用 std::array
而不是 boost::array
。
类 array
满足了“可逆容器”的大部分但并非全部要求(请参阅 C++ 标准的第 23.1 节,[lib.container.requirements])。array 不是可逆 STL 容器的原因是因为
它不满足“序列”的要求(请参阅 C++ 标准的第 23.1.1 节,[lib.sequence.reqmts]),除了
front
() 和 back
()。operator[]
和 at
()。