当我们提到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;
}

输出是:

array本质是数组

这里是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进行比较和赋值操作

总结:通过连续内存我们发现array其实不是动态数组,只不过是拥有多个功能的普通数组罢了。

点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)