STL容器之<array>

时间:2021-11-24 01:11:26

测试环境

系统:ubuntu 22.04.2 LTS 64位
gcc版本:11.3.0
编辑器:vsCode 1.76.2

array介绍

array是固定大小的序列式容器,它包含按严格的线性序列排列的特定数量的元素。与其他容器不同,array具有固定的大小,并且不通过分配器管理其元素的分配,因此其不能动态的扩展和收缩。(零大小的数组是有效的)。元素存储在连续的内存位置中,大小是编译时常数,没有内存或时间开销

头文件

#include <array>

模块类定义

_Tp:表示自定义数据类型
_Nm:表示_Ty的数量

template <class Tp, std::size_t _Nm> class array;

对象构造

/* (默认构造函数)构造一个包含10个int类型的数组对象 */
std:array<int, 10> arrInt;  
/* (拷贝构造函数)使用arrInt构造一个相同的数组对象 */
std::array<int, 10> arrInt1(arrInt)
/* 构造0长数组 */
std::array<int, 0> arrZero;
/* 二维数组构造,多维数组同理 */
std::array<std::array<int, 10>, 10> arrInt2;

初始化

/* 使用初始化列表进行初始化 */
arrInt = {0,1,2,3,4,5,6,7,8,9};

元素访问

函数名 返回值 功能
[] 指定元素的值 访问元素
at() 指定元素的引用 访问元素
front() 首元素的引用 获取首元素
back() 元素的引用 获取末尾元素
data() 首元素的地址 获取指向首元素的指针
/* 使用下标运算符访问元素并赋值 */
for (int i = 0; i < 10; i++)
{
	std::cout<< arrInt[i] << " ";
}
/* 使用at访问元素并赋值 */
for (int i = 0; i < 10; i++)
{
	std::cout << arrInt.at(i) << " ";
}
/* 取数组第一个和最后一个元素,返回值类型为元素的引用,注:0长度数组不能使用,运行时后出错 */
std::cout << arrInt.front() << " " << arrInt.back() << std::endl;
/* 获取指向数组头的指针 */
int *p = arrInt.data();

注:front()和back()不能用于获取0长度数组的元素。

容器大小

函数 返回值 功能
empty() bool 判断array是否为空,为空返回true,不为空返回false
size() std:size_t 获取数组长度
max_size() std::size_t 获取数组的最大长度与size()相同
/* 判断数组是否为空, 返回值为bool类型,数组为空返回true,否则返回false,只有0长度数组返回true */
std::cout << arrInt.empty() << std::endl;
/* 获取数组大小,注:max_size在array中获取的大小与size相同,其他容器中可能大小不一致*/
std::cout << arrInt.size() << " " << arrInt.max_size() << std::endl;

注:empty()只有0长度数组才会返回true;size()和max_size()获取的大小始终相同为数组长度。

迭代器

类型 功能
iterator 正向随机访问迭代器。从前向后访问元素,可以读取也可以修改
const_iterator 常量正向随机访问迭代器。从前向后访问元素,只能读取不能修改
reverse_iterator 逆向随机访问迭代器。从后向前访问元素,可以读取也可以修改
const_reverse_iterator 常量逆向随机访问迭代器。从后向前访问元素,只能读取不能修改
函数 返回值 功能
begin() 正向随机访问迭代器 返回指向array对象首元素所在位置的迭代器
end() 正向随机访问迭代器 返回指向array对象末尾元素的下一个位置的迭代器
cbegin() 常量正向随机访问迭代器 返回指向array对象首元素所在位置的常量迭代器
cend() 常量正向随机访问迭代器 返回指向array对象末尾元素的下一个位置的迭代器
rbegin() 逆向随机访问迭代器 返回指向array对象末尾元素位置的迭代器
rend() 逆向随机访问迭代器 返回指向array对象首元素的前一个位置的迭代器
crbegin() 常量逆向随机访问迭代器 返回指向array对象末尾元素位置的常量迭代器
crend() 常量逆向随机访问迭代器 返回指向array对象首元素的前一个位置的常量迭代器
/*正向随机访问迭代器,每个元素+10,并打印输出(10 11 12 13 14 15 16 17 18 19)*/
std::array<int, 10>::iterator itr;
for (itr = arrInt.begin(); itr != arrInt.end(); itr++)
{
	/* 修改元素值每个元素+10 */
	*itr += 10; 
	/* 访问元素 */
	std::cout << *itr << " ";
}

/*常量正向随机访问迭代器,并打印输出(10 11 12 13 14 15 16 17 18 19)*/
std::array<int, 10>::const_iterator cItr;
for (cItr = arrInt.begin(); cItr != arrInt.end(); cItr++)
{
	/* 不允许修改值,编译报错 */
	//*cItr += 10; 
	/* 访问元素 */
	std::cout << *cItr << " ";
}

/*逆向随机访问迭代器,每个元素+100,并打印输出(119 118 117 116 115 114 113 112 111 100)*/
std::array<int, 10>::reverse_iterator rItr;
for (rItr= arrInt.rbegin(); rItr!= arrInt.rend(); rItr++)
{
	/* 修改元素值 */
	*rItr += 100; 
	/* 访问元素 */
	std::cout << *rItr << " ";
}

/*常量逆向随机访问迭代器,并打印输出(119 118 117 116 115 114 113 112 111 100)*/
std::array<int, 10>::const_reverse_iterator crItr;
for (crItr= arrInt.crbegin(); crItr!= arrInt.crend(); crItr++)
{
	/* 不允许修改元素值, 编译报错 */
	//*crItr += 100; 
	/* 访问元素 */
	std::cout << *crItr << " ";
}

其他函数

函数 返回值 功能
fill() 将array中的所有元素用指定的元素进行填充
swap() 交换两个容器的元素
/* 数据填充,将数组所有元素填充为15,无返回值 */
arrInt.fill(15);
/*交互两个数组元素的值,无返回值*/
std::array<int, 5> arrTest1;
std::array<int, 5> arrTest2:
arrTest1.fill(10);
arrTest2.fill(15);
arrTest1.swap(arrTest2);

注:empty()只有0长度数组才会返回true;front()和back()不能用于获取0长度数组的元素。size()和max_size()获取的大小始终相同为数组长度。