c++中数组类型继承了C语言中的特定,但是使用的过程中需要注意到数组越界等问题。为了更加安全的对数组进行操作,C++11提出了数组模板类array

1、array模板类的定义

1.1 模板类的声明

数组类是固定大小的序列容器,它们包含以严格线性序列排序的特定数量的元素。数组类具有固定大小,并且不通过分配器管理其元素的分配,它们是封装固定大小元素数组的聚合类型。

  1. template<class T,size_t N> class array;

image.png

1.2 容器属性

  • 序列容器中的元素按严格的线性顺序排序。各个元素按其顺序访问它们的位置。
  • 元素存储在连续的存储器位置,允许对元素进行恒定时间随机访问。可以偏移元素的指针以访问其他元素。
  • 容器使用隐式构造函数和析构函数静态分配所需的空间。它的大小是编译时常量。没有内存或时间开销。

    1.3 array模板类的说明

    T为数组存储的数据类型
    N为元素的个数

2、array的使用

2.1 iterators

begin 头部
end 尾部

参考下面的代码:

  1. #include <bits/stdc++.h>
  2. #include <array>
  3. using namespace std;
  4. int main(){
  5. array<int,5> arr = {1,2,3,4,5};
  6. for(auto it = arr.begin();it < arr.end();it++){
  7. cout << *it << " ";
  8. }
  9. system("pause");
  10. return 0;
  11. }

2.2 capacity

模板类array容器的大小也是固定的,可以通过sizeof(),``size(),max_size(),empty()等函数进行检测

  1. #include <iostream>
  2. #include <array>
  3. int main(void) {
  4. std::array<int, 5> arr = {1, 2, 3, 4, 5};
  5. std::cout << "sizeof(array) = " << sizeof(arr) << std::endl;
  6. std::cout << "size of array = " << arr.size() << std::endl;
  7. std::cout << "max_size of array = " << arr.max_size() << std::endl;
  8. if (arr.empty()) {
  9. std::cout << "array is empty!" << std::endl;
  10. } else {
  11. std::cout << "array is not empty!" << std::endl;
  12. }
  13. return 0;
  14. }

运行结果:

  1. sizeof(array) = 20
  2. size of array = 5
  3. max_size of array = 5
  4. array is not empty!

2.3 获取元素

可以通过下标[ ]at()front()back()data()等函数访问array容器内的元素。

operator[ ] Access element
at Access element
front Access first element
back Access last element
data Get pointer to first data

2.4 修改

可以使用fill()swap()等函数对array容器整体进行操作。

fill Fill array with value
swap Swap content

fill(value):将数组里面的数据都设置成value
temp.swap(arr):将arr中的数据复制到temp

2.5 比较 compare

还可以使用> < ==等符号对两个array数组容器进行比较。