返回顶部

【STL基础】序列式容器之array

参照自文档http://www.cplusplus.com/reference/array/,教程http://c.biancheng.net/view/6688.html,和书籍《STL源码剖析》(侯捷)

定义:

template<class T, size_t N> class array;

array是C++语言自带的一个序列式容器,使用时需要引入头文件和std命名空间。

(一)初始化

方式一:创建了具有10个元素的array,但是并没有默认值

std::array<double, 10> values;

方式二:创建了10个元素的array,初始化为0.0

std::array<double, 10> values {};

方式三:创建了10个元素的array,并进行初始化,其余默认为0.0

std::array<double, 10> values {1, 2, 4.0, 2.2};

(二)迭代器函数

  • begin():返回指向容器中第一个元素的随机访问迭代器。
  • end():返回指向容器最后一个元素后一个位置的随机访问迭代器。
  • rbegin():返回指向最后一个元素的随机访问迭代器
  • rend():返回指向第一个元素前一个位置的随机访问迭代器
  • cbegin():和 begin() 功能相同,只不过在其基础上增加了 const 属性,不能用于修改元素。
  • cend()、crbegin()、crend():依此类推

    前缀带c的返回的迭代器是const类型,因此只能通过它读取而不能修改元素。

(三) 容量函数

  • size():返回容器中当前元素的数量,其值始终等于初始化 array 类的第二个模板参数 N。
  • max_size():返回容器可容纳元素的最大数量,其值始终等于初始化 array 类的第二个模板参数 N。
  • empty():判断容器是否为空,相当于size()==0,但是其效率更高。

(四)元素访问函数

  • at(n):返回容器中n位置处元素的引用,该函数自动检查 n 是否在有效的范围内,如果不是则抛出 out_of_range 异常。
  • front():返回容器中第一个元素的直接引用,该函数不适用于空的 array 容器。
  • back():返回容器中最后一个元素的直接应用,该函数同样不适用于空的 array 容器。
  • data():返回一个指向容器首个元素的指针。利用该指针,可实现复制容器中所有元素等类似功能。

(五)修改器函数

  • fill(val):将val这个值赋给容器中的每个元素。
  • array1.swap(array2):交换array1和array2容器中所有的元素,前提是长度和类型相同。

(六)重载运算符

  • array可以通过运算符[]以下标的形式访问元素。

(七)重载函数

  • array重载了get(),可以用于访问容器中指定的元素,并返回该元素的引用

(八)示例

#include <iostream>
#include <array>

using namespace std;

int main(){
	std::array<int, 4> values{};//初始化
	for(int i = 0; i < values.size(); ++i){
		values.at(i) = i;//这种修改方式比values[i]=i更安全
	}
	cout << get<3>(values) << endl;//使用了重载的get()函数,输出了位置为3的元素引用
	if(!values.empty()){//判空
		for(auto val = values.begin(); val < values.end(); ++val){
			cout << *val << " ";//使用迭代器遍历元素
		}		
	}
}
posted @ 2020-11-12 15:55  藤原豆腐店の張さん  阅读(113)  评论(0编辑  收藏  举报