STL-容器库101--array【C11】

1. 原型

C11提供

template < class T, size_t N > class array;

T: 元素类型,以 array::value_type 作为别名使用;
N: array中元素大小;
  • 固定size的序列容器;
  • 初始化时, array对象不保存任何数据,除了编译时期的行为对“元素”参数的编译器初始化值
  • 和普通的数组一样,从[]访问
  • array仅仅为数组封装了一层成员函数和全局函数,以作为标准容器使用
  • array固定容器大小,不能扩展容量;
  • 0大小的array是有效的,但是不能访问数据。
  • STL  中的swap操作是非常低效率的操作;
  • array容器能够作为tuple对象(元组对象)使用。 头文件<array>中重载了get函数来获取array中的元素值。
使用头文件:
  #include <array>

1.1 成员类型:

array中的成员类型作为一些参数、或者返回值类型的别名使用,下面的是别面以及定义:

  • value_type:模板参数T
  • reference: value_type&
  • const_reference: const value_type&;
  • pointer: value_type*
  • const_pointer: const value_type*;
  • iterator: 随机指向value_type的迭代器
  • const_iterator: 指向const value_type类型的迭代器
  • reverse_iterator:
  • const_reverse_iterator:
  • size_type: size_t(无符号整数 unsign int)
  • difference_type: ptrdiff_t(符号整形 int)

1.2 成员函数

(1)Iterators

Array::begin:

Array::end:

Array::rbegin:

Array::rend;

Array::cbegin

Array::cend;

Array::crbegin

Array::crend;

(2)Capacity

Array:: size(): 元素数量

Array::max_size():最大容量

Array::expty(): 测试是否为空

(3)Element access

Array:: operator[]: 
  • 返回参数n位置的reference,注意,第一个元素位置为0
  • 与 成员函数at()具有相同的行为, 但是array::at()是会检查参数n是否越界,以及如果越界则抛出异常信号
  • 如果是const的array,则返回const_reference,否则返回reference
  • 注意:refenerence的样式是类型array内的别名定义。

reference at ( size_type n );

const_reference at ( size_type n ) const;

  • 返回参数n位置的reference。自定检测n是否位于有效的范围内。并抛出out_of_rance 异常。如果n 大于size或者等于size

Array::front();

  • 返回第一个元素的reference
  • Calling this function on an empty container causes undefined behavior.

Array::back();

  • 返回最后一个元素的reference, 不像array::end()返回的是iterator
  • Calling this function on an empty container causes undefined behavior.

Array::data();

  • 返回pointer类型指向第一个元素;
  • 因为array类型是连续内存分配,因此可以对pointer进行任何偏置访问相应位置数据;

(4)Modifiers

void Array::fill(const value_type& val):
  • 对数组中的所有元素设置参数值
void Array::swap(array& x):
  • 交换内容,两个对象具有相同的size;
  • 调用之后,两个对象互相交换内容;

 1.3 非成员函数重载

  get(array)

返回array 中的第i个元素属性引用。

  relational operators(array)

1.4 非成员 类的声明

(1)tuple_element<array>

(2)tuple_size<array>

上一篇:不要重复发明*-C++STL


下一篇:《Effective C++》第4章 设计与声明(2)-读书笔记