c++中数组类型继承了C语言中的特定,但是使用的过程中需要注意到数组越界等问题。为了更加安全的对数组进行操作,C++11提出了数组模板类array
1、array模板类的定义
1.1 模板类的声明
数组类是固定大小的序列容器,它们包含以严格线性序列排序的特定数量的元素。数组类具有固定大小,并且不通过分配器管理其元素的分配,它们是封装固定大小元素数组的聚合类型。
template<class T,size_t N> class array;
1.2 容器属性
- 序列容器中的元素按严格的线性顺序排序。各个元素按其顺序访问它们的位置。
- 元素存储在连续的存储器位置,允许对元素进行恒定时间随机访问。可以偏移元素的指针以访问其他元素。
- 容器使用隐式构造函数和析构函数静态分配所需的空间。它的大小是编译时常量。没有内存或时间开销。
1.3 array模板类的说明
T
为数组存储的数据类型N
为元素的个数
2、array的使用
2.1 iterators
begin | 头部 |
---|---|
end | 尾部 |
参考下面的代码:
#include <bits/stdc++.h>
#include <array>
using namespace std;
int main(){
array<int,5> arr = {1,2,3,4,5};
for(auto it = arr.begin();it < arr.end();it++){
cout << *it << " ";
}
system("pause");
return 0;
}
2.2 capacity
模板类array
容器的大小也是固定的,可以通过sizeof(),``size(),max_size(),empty()
等函数进行检测
#include <iostream>
#include <array>
int main(void) {
std::array<int, 5> arr = {1, 2, 3, 4, 5};
std::cout << "sizeof(array) = " << sizeof(arr) << std::endl;
std::cout << "size of array = " << arr.size() << std::endl;
std::cout << "max_size of array = " << arr.max_size() << std::endl;
if (arr.empty()) {
std::cout << "array is empty!" << std::endl;
} else {
std::cout << "array is not empty!" << std::endl;
}
return 0;
}
运行结果:
sizeof(array) = 20
size of array = 5
max_size of array = 5
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数组容器进行比较。