13.2. Boost.Array

Boost.Arrayboost/array.hpp 中定义了一个模板类 boost::array 。 通过使用这个类, 你可以创建一个跟 C++ 里传统的数组有着相同属性的容器。 而且, boost::array 还满足了 C++ 中容器的一切需求, 因此, 你可以像操作容器一样方便的操作这个 array。 基本上, 你可以把 boost::array 当成 std::vector 来使用, 只不过 boost::array 是定长的。

  1. #include <boost/array.hpp>
  2. #include <iostream>
  3. #include <string>
  4. #include <algorithm>
  5.  
  6. int main()
  7. {
  8. typedef boost::array<std::string, 3> array;
  9. array a;
  10.  
  11. a[0] = "Boris";
  12. a.at(1) = "Anton";
  13. *a.rbegin() = "Caesar";
  14.  
  15. std::sort(a.begin(), a.end());
  16.  
  17. for (array::const_iterator it = a.begin(); it != a.end(); ++it)
  18. std::cout << *it << std::endl;
  19.  
  20. std::cout << a.size() << std::endl;
  21. std::cout << a.max_size() << std::endl;
  22. }

就像我们在上面的例子看到的那样, boost::array 简直就是简单的不需要任何多余的解释, 因为所有操作都跟 std::vector 是一样的。

在下面的例子里, 我们会见识到 Boost.Array 的一个特性。

  1. #include <boost/array.hpp>
  2. #include <string>
  3.  
  4. int main()
  5. {
  6. typedef boost::array<std::string, 3> array;
  7. array a = { "Boris", "Anton", "Caesar" };
  8. }

一个 boost::array 类型的数组可以使用传统 C++ 数组的初始化方式来初始化。

既然这个容器已经在 TR1 中加入到了 C++ 标准, 它同样可以通过 std::array 来访问到。 他被定义在头文件 array 中, 使用它的前提是你正在使用一个支持 TR1 的 C++ 标准的库。