2023-3-3-std::array的用法

简介: 2023-3-3-std::array的用法

std::array的特性

std::array是具有固定大小的数组。因此,它并不支持添加或删除元素等改变大小的操作。也就是说,当定义一个array时,除了指定元素类型,还要指定容器大小。

既然有了内置的数组,为什么还要引入array呢?

内置的数组有很多麻烦的地方,比如无法直接对象赋值,无法直接拷贝等等,同时内置的数组又有很多比较难理解的地方,比如数组名是数组的起始地址等等。相比较于如vector等容器的操作,内置数组确实有一些不方便的地方。因此,C++11就引入array容器来代替内置数组。

简单来说,std::array除了有内置数组支持随机访问、效率高、存储大小固定等特点外,还支持迭代器访问、获取容量、获得原始指针等高级功能。而且它还不会退化成指针给开发人员造成困惑。


std::array和vector比较

  • array是c++11之后新加的容器类型,他比vector更加轻便。
  • array的数据存储在栈中,vector的数据存储在堆中。所以
  • array容器处理数据的效率更快
  • vector处理数据的量更大
  • vector更强大,封装的函数更多;array更轻便,更适合一些操作简单,数据量比较少的情况。
  • 这就可以看出来差别了,array能存储多少,在初始化就确定了;而vector能存多少,是固定的,初始化的时候也不需要传入元素个数。

总之,vector肯定是更强大,但是强大一定会损失点东西;在数据量少的时候,并且不需要一些复杂操作的时候,可以选择array,因为它更快也更适合。


std::array的使用

使用array之前,需要包含头文件:

# include <array>

定义array时,需要指定其数据类型和大小,两者不可或缺。同时,array的大小不能使用变量来指定,但对于内置数组来说,是可以使用变量来指定数组大小的。

定义array时,可以使用{}来直接初始化,也可以使用另外的array来构造,但不可以使用内置数组来构造。


目录
相关文章
|
1月前
|
设计模式
ES6中新增Array.from()函数的用法详解
ES6中新增Array.from()函数的用法详解
34 1
|
1月前
|
JSON 数据格式 C++
C++ JSON库 nlohmann::basic_json::array 的用法
C++ JSON库 nlohmann::basic_json::array 的用法
113 1
|
1月前
|
自然语言处理 算法 C++
std::array 教程(来自cppreference.com)
std::array 教程(来自cppreference.com)
37 0
|
11月前
|
存储 安全 编译器
C++ 中的std::array实现编译器排序
某日二师兄参加XXX科技公司的C++工程师开发岗位第25面: 面试官:array熟悉吗? 二师兄:你说的是原生数组还是std::array? 面试官:你觉得两者有什么区别? 二师兄:区别不是很大,原生数组(非动态数组)和std::array都在栈上开辟空间,初始化的时候需要提供数组长度,且长度不可改变。有一点区别的是,std::array提供了安全的下标访问方法at,当下标越界时会抛出异常。
78 0
Array.prototype.includes() 原型调用用法案例讲解
Array.prototype.includes() 原型调用用法案例讲解
92 2
|
C++ 容器
论c++中的数组,vector和array的区别及用法
论c++中的数组,vector和array的区别及用法
248 0
|
编译器 C语言
【C 语言】数组 ( 数组取值操作 | array[i][j] 用法 等价于 *( *(array = i) + j ) 用法 | 下标操作到指针操作演化过程 )
【C 语言】数组 ( 数组取值操作 | array[i][j] 用法 等价于 *( *(array = i) + j ) 用法 | 下标操作到指针操作演化过程 )
265 0