STL总结之array

本文详细介绍了C++ STL中的array容器,包括其定义、初始化、修改和查询方法,以及如何进行元素的访问和操作。array容器是一个固定大小的顺序容器,支持多种初始化方式和丰富的元素访问手段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍

array 是一个封装普通数组的顺序容器,其数组大小固定,可以使用索引位置访问元素,受限地在尾部插入和删除元素,但是受限地在中部插入或删除元素是比较麻烦的 (受限指的是可能因为数组大小原因,导致操作失败)。
array 定义于头文件 <array>,其声明如下:

template<
	class T,
	std::size_t N
> struct array;

array 顺序容器是一个聚合体,而非一个类。
有两种类型的对象被称为聚合体:

  • 数组类型
  • 满足下列条件的类类型 (通常是结构体或者联合体):
    1. 没有私有或保护的非静态数据成员
    2. 没有用户提供的构造函数
    3. 没有基类
    4. 没有虚函数

初始化

  • array<T,N> arr;
    创建一个数组大小为 N,数组元素类型为 T,数组元素被预初始化 (或者称为聚合初始化) 的 array 容器。

    array<int,4> arr;
    
  • array<T,N> arr = {num1,num2,……};
    创建一个数组大小为 N,数组元素类型为 T,数组元素被初始化为 num1、num2……的 array 容器。

    array<int,4> arr = {0,1};
    

    不能这样初始化 arrayarray<T,N> arr({0,1}); ,原因在于 array 容器并没有提供针对初值列而写的构造函数。

  • array<T,N> arr(arr1);
    创建一个 arr1 的同型拷贝 (所有元素都被复制)。

    array<int,4> arr1 = {0,1};
    array<int,4> arr(arr1);
    
  • array<T,N> arr = arr1;
    创建一个 arr1 的同型拷贝 (所有元素都被复制)。

    array<int,4> arr1 = {0,1};
    array<int,4> arr = arr1;
    

修改

访问 array 中元素,有以下几种方式:

  1. at(index)
    返回索引位置所指元素的引用。如果访问越界,抛出异常。
    cout << arr.at(0) << endl;
    
  2. operator[index]
    返回索引位置所指元素的引用。不对访问是否越界进行检查。
    cout << arr[0] << endl;
    
  3. front()
    返回 array 第一个元素的引用。
    cout << arr.front() << endl;
    
  4. back()
    返回 array 最后一个元素的引用。
    cout << arr.back() << endl;
    
  5. data()
    返回 array 底层数组的指针。
    int* num = arr.data();
    cout << num[0] << endl;
    
  6. 迭代器
    array<int,4>::iterator ite = arr.begin();
    
    for (;ite != arr.end(); ++ite)
    {
        cout << *ite << " ";
    }
    

以上 6 种访问方式都可以实现修改。
其余修改方法不常用,因此放弃列举。

查询

  • empty()
    判断 array 容器是否为空。
  • size()
    返回 array 容器中元素个数,其值为 N。
  • max_size()
    返回 array 容器可容纳的最大元素数,由于 array 容器大小固定,因此其值为 N。

比较

按照字典序列比较 array 中的值。

  • operator ==
  • operator !=
  • operator <
  • operator <=
  • operator >
  • operator >=
if(arr == arr1)
{
	cout << "arr == arr1" << endl;
}

增加

没有实现。

删除

没有实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值