当前位置: 首页 > news >正文

STL容器之<array>

文章目录

    • 测试环境
    • array介绍
    • 头文件
    • 模块类定义
    • 对象构造
    • 初始化
    • 元素访问
    • 容器大小
    • 迭代器
    • 其他函数

测试环境

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

http://www.lryc.cn/news/43907.html

相关文章:

  • flask教程6:cookie和session
  • 【JavaEE初阶】第六节.网络原理TCP/IP协议
  • 模式识别 —— 第六章 支持向量机(SVM)与核(Kernel)
  • 总结 synchronized
  • 360周鸿祎又“开炮”:GPT 6-8就将产生自主意识!我们来测算一下对错
  • python——飞机大战小游戏
  • 数组(完全二叉树)向下建堆法与堆排序O(N*logN)
  • Lua require 函数使用
  • 【面试】如何定位线上问题?
  • 字节二面,原来我对自动化测试的理解太浅了
  • Android11.0 应用升级成功后立即断电重启,版本恢复
  • 关于python常用软件用法:Pycharm 常用功能
  • SOLIDWORKS你不知道的小技巧
  • 有了HTTP,为啥还要用RPC
  • [leetcode] 动态规划
  • 科大奥瑞物理实验——热电偶特性及其应用研究
  • Eclips快捷键大全(超详细)
  • 整懵了,蚂蚁金服4面成功拿下测开offer,涨薪10k,突然觉得跳槽也不是那么难
  • C++内存分布malloc-free-new-delete的区别和联系
  • 【华为OD机试 2023最新 】 最多颜色的车辆(C++ 100%)
  • Linux安全加固
  • Java基础学习(6)
  • 【LeetCode】链表练习 9 道题
  • 轴承远程监控系统解决方案
  • 阿里云轻量服务器Workbench root远程连接和一键连接的区别
  • 带你用纯C实现一个内存池(图文结合)
  • ChatGPT使用案例之图像生成
  • 蚁群算法优化旅行问题
  • 树数据结构
  • Spring Boot整合Redis并提供多种实际场景的应用