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

时间:2023-03-09 02:11:20
[翻译] C++ STL容器参考手册(第一章 <array>)

返回总册

本章节原文:http://www.cplusplus.com/reference/array/array/

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

template < class T, size_t N > class array;

数组类

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

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

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

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

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

 int a=;
int* pa=&a; //此处的&a是引用操作
*pa=; //此处的*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 type definition notes
value_type The first template parameter (T)  
reference value_type&  
const_reference const value_type&  
pointer value_type*  
const_pointer const value_type*  
iterator random access iterator to value_type convertible to const_iterator
const_iterator random access iterator to const value_type  
reverse_iterator reverse_iterator<iterator>  
const_reverse_iterator reverse_iterator<const_iterator>  
size_type size_t unsigned integral type
difference_type ptrdiff_t signed integral type

5. 成员函数

迭代器

begin
返回指向容器最前端的迭代器 (公有成员函数)
end
返回指向容器最后端的迭代器 (公有成员函数)
rbegin
返回指向容器最后端的反向迭代器 (公有成员函数)
rend
返回指向容器最前端的反向迭代器 (公有成员函数)
cbegin
返回指向容器最前端的只读迭代器 (公有成员函数)
cend
返回指向容器最后端的只读迭代器 (公有成员函数)
crbegin
返回指向容器最后端的反向只读迭代器 (公有成员函数)
crend
返回指向容器最前端的反向只读迭代器 (公有成员函数)
*译者:这里的“最前端”与“最后端”分别指容器中第一个元素与容器中最后一个元素。只读迭代器本身可以进行增减操作,但是使用只读迭代器指向的元素是只读的。

容量

size
返回元素的数量 (公有成员函数)
max_size
返回容器最多能够存储的元素数量 (公有成员函数)
empty
测试数组容器是否为空 (公有成员函数)

元素的访问

operator[]
访问元素 (公有成员函数)
at
访问元素 (公有成员函数)
front
访问第一个元素 (公有成员函数)
back
访问最后一个元素 (公有成员函数)
data
返回指向数据的指针* (公有成员函数)
*译者:data返回的指针其实就是指向第一个元素的指针。 

修改器

fill
使用某个值填充整个容器 (公有成员函数)
swap
交换容器的内容 (公有成员函数)

6. 重载的非成员函数

get (array)
  获取元素(元组接口)(模板函数)
relational operators (array)

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

7. 特化非成员类

tuple_element<array>

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

tuple_size<array>

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