array是C++11中新提出来的容器类型,与内置数组相比,array是一种更容易使用,更加安全的数组类型,可以用来替代内置数组。作为数组的升级版,继承了数组最基本的特性,也融入了很多容器操作,下面介绍array和内置数组。

array和数组一样,是一种固定大小的容器类型,在定义的时候就要声明大小和类型。

定义和初始化:

数组的初始化有两种:默认初始化和列表初始化

int arr[10]; //10个值为0的int型整数

int arr[5]={1,2,3,4,5};

int arr[]={1,2,3};//维度为3 的数组,显式的列出所有元素

int arr[5]={1,2,3};显式的初始化数组的前三个元素,剩下的元素默认初始化

数组初始化不能直接使用拷贝和赋值!!!数组的传递只能是遍历的形式来拷贝

array的初始化:和数组初始化差不多

array<int,10> ial;

array<int,10> ial1={0,1,2,3};

和数组不同的是,array可以使用拷贝和赋值的形式进行初始化

array<int,10> copy=ial1;//只要保证两者的类型一致就可以(包括元素类型和大小)

使用方式:

数组的访问:下标、指针、迭代器(和vector、array一样在内存中都是使用连续内存)

使用下标可以随机访问数组的元素,注意不要超出数组合理的范围。标准库中的vector、string和array对于下标的运算要求下标必须是无符号类型,而数组则没有这个限制。

例如:int *p=&arr[2];//p指向数组的第三个元素,指针的起点是在第三个元素

int j=p[1];//p[1]等价于*(p+1),也就是arr[3]

int i=p[-2];//等价于*(p-2),也就是arr[0]

只要保证指针运算后还在数组的范围内即可

数组名其实就是指向第一个元素的指针

int *p=arr;或者int *p=&arr[0];都是可以的,或者直接就用数组名作为指针进行运算。

在c++11中给数组提供了更加安全的访问方式,类似于迭代器的操作,但是数组不是类类型,并没有成员函数,新标准中引入了begin()和end()函数

int *beg=begin(arr);//指向首元素

int *last=end(arr);//指向尾元素的下一个

同理,如果要是遍历数组,同样可以使用范围for语句。

array的使用

array与数组最大的区别是array是一种容器类型,它支持一系列容器操作,但是它和数组更接近,很多通用的容器操作它却不支持,因此在这里和数组来比较。

下面从容器的角度来看array的区别

1.不支持局部拷贝

例如不允许C c(b, e);//将迭代器b和e之间的元素拷贝到c

不允许用C1={a,b,c...};用列表中的元素替换C1

2.不允许添加或删除元素,因为array是固定大小的。

相比于数组,array可以使用成员函数。其中包括:

1.可以使用拷贝和赋值,只要保证类型一致即可

2.使用swap函数,a.swap(b);或者swap(a,b);交换两者的元素

3.使用正向和反向迭代器

array是数组的升级版,将数组正式纳入到容器的范畴。array在使用和性能上都要强于内置数组,对于一些固定大小的使用场景,可以用array来替代原先数组的工作。

---------------------
作者:微燃
来源:CSDN
原文:https://blog.csdn.net/u011405218/article/details/70653323?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!

最新文章

  1. Bootstrap 3.0正式版发布!
  2. java 27 - 2 反射之 反射的概述以及获取Class文件对象的方式
  3. Good Firewall(字典树 HDU4760)
  4. 利用百度词典API和Volley网络库开发的android词典应用
  5. IOS开发之——友盟社会化分享UMSocial_SDK的使用
  6. U3D UGUI学习2 - Canvas
  7. 大型web系统架构详解
  8. openmeetings 视频会议系统介绍
  9. 第八章 CTE 递归 及 分组汇总 高级部分(多维数据集)
  10. Tomcat的错误 之 java.lang.IllegalArgumentException: Document base * does not exist
  11. 编译型/解释型语言,什么时候用shell
  12. ON COMMIT PRESERVE ROWS
  13. 如何在HTML表格里定位到一行数据
  14. SQL入门(1): 创建/查询/更新/连接/视图/SSMS简介
  15. XXS level9
  16. 第三章 jQuery总结 参考文本
  17. docker图形化管理工具portainer
  18. Daily Scrum &amp; Project Team Meeting Review - 11/27
  19. 数据分析与挖掘 - R语言:K-means聚类算法
  20. Hive的安装与配置

热门文章

  1. mssql sqlserver 判断字符串大小写的方法分享
  2. mssql sqlserver 视图如何加密,让第三方用户查看不到其中的SQL语句
  3. mssql 一次向表中插入多条数据的方法分享 (转自:http://www.maomao365.com/?p=6058)
  4. Oracle EBS when-validate-record 个性化无效果
  5. Fatal error: Can&#39;t open and lock privilege tables: Table &#39;mysql.host&#39; doesn&#39;t exist
  6. JaveScript 中使用 XSLT转换XML文档
  7. PXE 自动安装物理机 (DHCP服务由路由提供, 不能再配置)
  8. 7.01-beautiful_soup3
  9. python六十七课——网络编程(基础知识了解)
  10. centos7下安装docker(22.docker swarm-----service)