Boost C++ Libraries Home Libraries People FAQ More

PrevUpHomeNext

Chapter 3. Boost.Array

Nicolai Josuttis

Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

Table of Contents

Introduction(簡介)
Reference(參考)
Header <boost/array.hpp>
Design Rationale(設計原則)
For more information...(更多信息……)
Acknowledgements(感謝)

Introduction(簡介)

作為 C++ 標準庫的一部分,C++ 標準模板庫(Standard Template Library STL)提供了一個用於各種不同容器的處理算法的框架。然而,普通數組不提供 STL 容器的接口(儘管它們提供了 STL 容器的迭代器接口)。

為了代替普通數組,STL 提供了 std::vector。但是,std::vector<> 提供動態數組的語義。因此,它管理元素數量會發生變化的數據。這導致的負擔超出僅有靜態大小的數組的需要。

Matthew H. Austern 在他的著作 Generic Programming and the STL 中,提出了一個用於靜態大小的普通數組的有用的包裝類,名叫 block。它更加安全,而且性能也不輸於普通數組。在 The C++ Programming Language 第三版中,Bjarne Stroustrup 提出了一個類似的類,名叫 c_array,我 (Nicolai Josuttis) 對它稍加改變,放到了我的書 The C++ Standard Library - A Tutorial and Reference 中,名叫 carray。這些方法中的一些基本的東西都在 boost 中得到了反應。

考慮了各種不同的名字後,我決定給這個類一個簡單的名字,array

注意,這個類已經被建議為下一版擴展 C++ 標準的技術報告的一部分(參見 http://std.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1548.htm)。

array 實現了大部分但不是全部的「可逆容器」的需求(參見 C++ 標準的 23.1, [lib.container.requirements])。array 不是一個 STL 可逆容器的原因在於:

  • 沒有提供構造函數。
  • 元素可能有一個不確定的初始值(參見「設計原則」部分)。
  • swap() 不具有常量複雜度。
  • size() 基於第二個模板參數的類型,總是恆定的。
  • 容器不提供分配器支持。

它沒有實現「序列」的需求(參見 C++ 標準的 23.1.1, [lib. sequence.reqmts]),但以下這些除外:

Last revised: December 01, 2006 at 06:34:43 -0500


PrevUpHomeNext