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