Boost C++ 库

...世界上最受尊敬和专业设计的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu,《C++ 编码标准

PrevUpHomeNext

第 5 章。Boost.Array

Nicolai Josuttis

在 Boost 软件许可版本 1.0 下发布。(请参阅随附的文件 LICENSE_1_0.txt 或在 https://boost.ac.cn/LICENSE_1_0.txt 复制)

目录

简介
参考
头文件 <boost/array.hpp>
设计原理
更多信息...
致谢

简介

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::arraystd::array 之间的差异很小。如果您正在使用 C++11,则应考虑使用 std::array 而不是 boost::array

array 满足了“可逆容器”的大部分但并非全部要求(请参阅 C++ 标准的第 23.1 节,[lib.container.requirements])。array 不是可逆 STL 容器的原因是因为

  • 没有提供构造函数。
  • 元素可能具有不确定的初始值(请参阅 “设计原理”部分)。
  • swap() 没有恒定的复杂度。
  • size() 始终是常数,基于类型的第二个模板参数。
  • 该容器不提供分配器支持。

它不满足“序列”的要求(请参阅 C++ 标准的第 23.1.1 节,[lib.sequence.reqmts]),除了


PrevUpHomeNext