array
简单介绍
array 是STL 中一个容器, 是一个定值数组
相当于C语言中 array[5].
在C++中, 使用容器都要使用想对应的头文件
例如:
使用array这个容器,就要使用 这个头文件
#include<vector>
创建对象以及赋值
二种方法:
第一种:array<数据类型, 大小> 对象;
赋值 : 例如:array<int , 3> = {0, 2, 4};
第二种: 用new
array<数据类型, 大小> * 变量名称 = new array<数据类型, 大小>;
赋值: (*变量名称)[数组下标] = 值
例如 : *arr3[0] = “温柔了岁月”
//array 2种方法 创建对象 //第一种 array<数据类型, 大小> 对象 array<int, 3> arr1; //第一种直接赋初值 array<数据类型, 大小> 对象 = {0, 2}可以直接赋值 array<int, 3> arr2 = { 0, 2 }; //第二种:用new array<string, 3>* arr3 = new array<string, 3>; //赋值操作 (* arr3)[0] = "温柔了岁月"; delete arr3;
通常使用第一种,第二种赋值方式相对于第一种过于麻烦
array中常用内置函数介绍
使用方法: 对象.函数
1.size(), 计算大小
2.empty(), 判断是否为空
3.begin(), 可以指向array数组的第一个元素,
注意:也可以表示array数组中的第一个元素
4.end(), 指向array数组中的最后一个元素,
注意:不表示array数组中的最后一个元素
5. front(), 第一个元素
6. back(), 最后一个元素
7. at(), 可以访问array数组中的数据**,注意需要加参数,array数组的下标**
这些内置函数, 有的后面会多次涉及, 最好记住
// STL中内置的函数 size() 计算大小 cout << arr2.size() << endl; cout << arr3->size() << endl; //C++中empty ()函数的作用是用来判断容器是否为空 //empty ()函数返回值为true,说明容器为空 empty ()函数返回值为false,说明容器不为空 cout << arr1.empty() << endl;
array数组的访问(正向遍历)
第一种:简单的for循环,用 cout 遍历打印不过array的大小用size计算
第二种:也是for循环,与第一种不同的是, 用array的内置函数at,来打印
第三种:则是遍历容器常用的方法,
用迭代器的方法(三种)
这里讲解第一种,也是用的最多的
首先
1.array<数据类型, 大小> ::(作用域) iterator(迭代器) 对象 = arr2.begin(),指向 第一个 元素
2.array<数据类型, 大小> ::(作用域) iterator(迭代器) 对象 = arr2.end(),指向 最后一个元素
3.for循环挨个打印,直到到最后一个元素
迭代器你可以变相的理解为指针,代表着地址
所以 * arr2.begin() 代表着值
//array的访问 //第一种 cout //for (int i = 0; i < arr2.size(); i++) //{ // cout << arr2[i] << endl; //} 第二种 内置函数at() //for (int i = 0; i < arr2.size(); i++) //{ // cout << arr2.at(i) << endl; //} //运用迭代器 三种方法 //第一种(常用) for (array<int, 3> ::iterator it = arr2.begin(); it != arr2.end(); it++) { cout << *it << endl; } //第二种方法 array<int, 3> ::iterator itBegin = arr2.begin(); array<int, 3> ::iterator itEnd = arr2.end(); while (itBegin != itEnd) { cout << *itBegin << endl; itBegin++; } //第三种 each_for()算法 ,这里暂不介绍, 后续讲算法的时候介绍
指针形式遍历
for (int i = 0; i < arr3->size(); i++) { cout << arr3->at(i) << endl; }
逆向遍历(反向迭代器)
正向迭代器:iterator
反向迭代器 reverse_iterator
rbegin() 指向array中最后一个元素
rend()指向array中第一个元素
for (array<int, 3> ::reverse_iterator it = arr2.rbegin(); it != arr2.rend(); it++) { cout << *it << endl; }
*注意:不能用正向迭代器,反着写,逆向打印array中的元素
因为 arr2.end() 并不代表 array中最后一个元素
如果这样操作,将会出现如下错误
array的嵌套
array本身是一个定长的数组,
嵌套一次,便是定长的二维数组,
嵌套二次,便是定长的三位数组。
…
这里需要注意的是如何打印
#include<iostream> #include<array> using namespace std; int main() { array<array<int, 4>, 3> date; //表示 3X4的二维数组 for (int i = 0; i < date.size(); i++) // date.size()表示行的大小 { for (int j = 0; j < date[i].size(); j++) // date[i].size(),表示列的大小 { date[i][j] = i; //随便赋的值 cout << date[i][j] << " "; } cout << endl; } array<array<array<int, 4>, 4>, 4>; //4X4X4的三维数组,可以无限嵌套 system("pause"); return 0; }