STL容器之<array>

本文介绍了C++标准库中的固定大小序列容器std::array,包括其头文件、构造方法、初始化、元素访问、容器大小、迭代器的使用以及其他相关函数。std::array提供了一种静态数组的封装,其大小在编译时确定且不可变,适合于需要高效、直接访问元素的场景。
摘要由CSDN通过智能技术生成

测试环境

系统: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()获取的大小始终相同为数组长度。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值