首页 > 代码库 > [翻译] C++ STL容器参考手册(第一章 <array>)

[翻译] C++ STL容器参考手册(第一章 <array>)

返回总册

1. std::array (C++11支持)

template < class T, size_t N > class array;

数组类

数组容器是固定长度的序列容器:按照严格的线性顺序,存储一定数量的元素。

数组容器内部并不维护除了元素本身之外的任何数据(甚至不保存自己的size,这是一个编译时就确定的模板参数)。数组容器对存储空间的利用效率和普通数组一样高。数组类仅仅在数组之外增加了一些成员以及全局函数,使得这些数组能够被当作一个标准容器来使用。

与其他的标准容器不同的是,数组容器具有固定的大小,并且不使用allocator来管理对元素内存空间的分配,数组容器集合了各样的成员并且封装了一个固定长度的数组。因此数组容器不能够被动态的扩展或者截断(参考vector,这是一个能够被扩展的相似的容器)。

定义长度为0的数组容器是合法的,但是不能对它解引用*(成员front,back,以及data)。

*译者:解引用是引用的反向操作,如下例:

1 int a=0;2 int* pa=&a;    //此处的&a是引用操作3 *pa=100;       //此处的*pa是解引用操作

与标准库中得其它容器不同的还有,交换*两个数组容器的操作涉及到逐个交换容器中每一个元素,通常情况下这是一个非常低效的操作。从另一方面来讲,这样的实现使得他们的迭代器始终保持着与原容器的关联。

*译者:交换操作是数组容器提供的一个方法(函数),通过这个方法可以交换两个数组容器内的元素,见swap。

数组容器另外一个独特的特性是它可以被当做一个tuple对象来操作:<array>头文件中重载了get函数,通过它可以像tuple一样来访问数组容器的元素,同样的也可以使用tuple_size以及tuple_element来获取数组容器的大小与元素类型。

2. 容器属性

序列
  序列容器中的元素是按照严格的线性顺序来存储的。访问每一个元素时,都是通过这个元素在序列中所处的位置来访问的。
连续的存储空间
  序列容器中的元素是存储在一片连续的内存空间中,因此随机访问任意元素的时间都是相同的。指向一个元素的指针可以通过偏移地址来访问其它元素。
固定长度
  容器使用构造器与析构器来静态分配所需要的空间。容器的大小在编译时就已经确定。(运行时)没有(额外的)空间或时间上的开销。

3. 模板参数

参数T
  容器所包含元素的类型。与类成员array::value_type是一致的。
参数N
  数组容器的大小,表示元素的数量。
在array成员函数的参考或说明中,这些参数名默认作为模板参数*。
*译者:比如说这里template < class T, size_t N > class array;

4. 成员类型

以下的这些别名都是array的成员类型。他们被广泛的用作参数类型和成员函数返回值的类型。
 
member typedefinitionnotes
value_typeThe first template parameter (T) 
referencevalue_type& 
const_referenceconst value_type& 
pointervalue_type* 
const_pointerconst value_type* 
iteratora random access iterator to value_typeconvertible to const_iterator
const_iteratora random access iterator to const value_type 
reverse_iteratorreverse_iterator<iterator> 
const_reverse_iteratorreverse_iterator<const_iterator> 
size_typesize_tunsigned integral type
difference_typeptrdiff_tsigned integral type


5. 成员函数

迭代器

*译者:这里的“最前端”与“最后端”分别指容器中第一个元素与容器中最后一个元素。只读迭代器本身可以进行增减操作,但是使用只读迭代器指向的元素是只读的。

容量

*译者:对于数组容器,size和max_size总是相同的。对于可动态增长的容器,出于时间性能的考虑,当需要扩展容器容量的时候,通常的做法是分配比实际需求更多的存储空间,这样一来就不需要在每次插入元素时都对容器扩容,在这种情况下,size代表了元素的数量,而max_size代表的是容器的容量,他们有可能不同。

元素的访问

*译者:data返回的指针其实就是指向第一个元素的指针。 

修改器

6. 重载的非成员函数

  数组容器的关系运算符(模板函数)

7. 特化非成员类

  数组类型的元组元素(类模板的特化)

  数组类型的元组长度特性(类模板的特化)

[翻译] C++ STL容器参考手册(第一章 <array>)