当我们提到STL容器,一看到array,可别天真地以为它和vector一样是动态数组,实际上,它也是c++里面的普通数组,只不过被封装成一个类,多了一些成员函数罢了。不信我证明给你看:
#include<bits/stdc++.h> /* array也是普通数组 */ using namespace std; /*数组内存是连续的 我们直接通过'&'来看看元素的地址*/ void test() { array<int,5> arr{1,2,3,4,5} ; for(int i=0;i<5;++i) { cout << &arr[i]<<'\n'; } } int main(){ test(); return 0; }
输出是:
这里是16进制数表示方式,可以清晰地看到地址是以4递增的一个等差数列。
array是数组的pro版,vector是数组的promax版。使用array肯定有其过人之处,其实该功能只不过是运算符重载的玩具罢了,也就是array可以进行'='等号赋值和大小字典序比较。
#include<bits/stdc++.h> /* array也是普通数组 */ using namespace std; /*array可以通过字典序比较*/ void test_compare() { array<char,10> arr1{'D','t','c','p','p','.','c','o','m'}; array<char,10> arr2{'D','t','c','p','p','.','c','o','m'} ; if(arr1==arr2) { cout << "arr1=arr2"<< '\n'; } else if(arr1>arr2) { cout << "arr1>arr2"<< '\n'; } else { cout << "arr1<arr2"<< '\n'; } } /*array可以通过'='进行赋值*/ void test_putVal() { array<char,10> arr1{'D','t','c','p','p','.','c','o','m'}; array<char,10> arr2; arr2=arr1; for(int i=0;i<arr2.size();++i) cout << arr2[i]; cout << '\n'; } int main(){ test_compare(); test_putVal(); return 0; }
可以看到程序也是正常运行的:
总结:通过连续内存我们发现array其实不是动态数组,只不过是拥有多个功能的普通数组罢了。
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程