原文:C++内置数组和array的比较


以下皆为转载:感谢作者

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

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

一. 定义和初始化:

1.数组

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

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};显式的初始化数组的前三个元素,剩下的元素默认初始化

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

2. array

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

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

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

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

二、使用方式:

1. 数组

数组的访问:下标、指针、迭代器(和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语句。

2.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来替代原先数组的工作。

C++内置数组和array的比较相关推荐

  1. 《C++ Primer 第五版》(第3.5-3.6节) ——C++中的内置数组类型,string对象和C风格字符串

    1.C++中的内置数组类型 C++中的数组是内置数据类型,但不是基础数据类型而是构造数据类型,是有限个相同数据.占据着连续物理存储空间的有序集合.而内置数据类型定义的下标运算符可以处理负值运算(只要在 ...

  2. vue.js (内置数组筛选器)

    数组过滤器 Vue有两个内置的过滤器来过滤或者排序数据,分别是: filterBy 和 orderBy . filterBy 语法: filterBy searchKey [in dataKey... ...

  3. JavaScript 函数定义+内置函数使用+array对象+object类型

    文章目录 函数定义 random() setInterval() setTimeout() 数组对象 object 函数定义 两种格式: function 自定义函数名称(参数1,参数2,...,参数 ...

  4. JavaScript常用内置对象之Array

    数组 (Array) 1. 作用: Array 对象用于在单个的变量中存储多个值 2. 概念: a.下标 -- 编号,从 0 开始,到 (长度-1) 结束,索引 b.元素 -- 数组中存放数据的空间 ...

  5. php5的内置数组,php 内置数组(     )可以获取服务器内变量信息。

    [判断题]双圆荷载是指双轮组车轴每一侧的双轮用两个圆表示.( ) [判断题]全耦合变压器与理想变压器都是无损耗且耦合系数等于1. [判断题]用图标模型解决盈亏平衡销量和当前销量之间的问题时,可以添加盈 ...

  6. Shell里内置数组BASH_REMATCH[n]个人解析

    先引用一段资料,出自:http://bbs.chinaunix.net/thread-4125147-1-1.html 红色注释为个人添加 ------------------------------ ...

  7. JavaScript连载20-数据存储方式、内置对象Array详解

    一.堆和栈,数据的存储方式 1.注意点: JS中是没有堆和栈的概念,我们用堆和栈来讲解,目的就是方柏霓讲解,存储方式是一致的. 2.存储方式: 基础数据类型进行值传递,复杂数据类型进行地址传递 < ...

  8. JS的对象与内置对象详细介绍

    感谢内容提供者:金牛区吴迪软件开发工作室 文章目录 前言 一.基本对象Object: 二.内置对象之Array: 三.内置对象之Math: 四.内置对象之Number: 五.内置对象之String: ...

  9. 简单聊聊js中的内置对象

    文章目录 一.Map对象 1.常用属性和方法 2.示例 二.Set 1.属性和方法 2.示例 三.Date对象 1.创建Date对象 1.1.*new Date() ;* 2.2.*new Date( ...

  10. js浏览器内置对象和js内置对象

    浏览器内置 1.Location 对象 hash :返回一个URL的锚部分 host 返回一个URL的主机名和端口 hostname 返回URL的主机名 href 返回完整的URL pathname ...

最新文章

  1. 6个超实用的Sudo命令使用技巧
  2. 观点|重磅出炉!29页《业内观点:机器人行业的未来》
  3. iPhone开发中现文件的增加 删除和查询
  4. 一步步编写操作系统 38 一级页表与虚拟地址3
  5. Golang——数据类型转换(Sprintf、Format、Append方式转换)
  6. 使用.NET为Window Mobile写自动化工具的无奈之处.
  7. 深度学习入门:Day-12
  8. parent.window php,javascript中的window.self、window.top、window.parent和window.opener详解
  9. Android/Linux boot time分析优化
  10. TensorFlow2.0学习使用笔记
  11. java 数字转大写中文_java如何实现,把数字转换成中文的大写数字?
  12. 宇视交换机vlan路由配置指导
  13. 柑曼怡推出非凡特酿系列;舒肤佳健康传中国“手护”新年期待助力2022年冬奥会 | 知消...
  14. Python基础——PyCharm版本——第八章、文件I/O(核心2——JSON序列化与反序列化——超重点)
  15. require.context()的用法
  16. Ant Design Pro 企业级后台实战(73 个视频)
  17. 街霸5服务器链接已中断,《街头霸王5》常见问题解决方法
  18. 一文搞定Centos7.x安装ELK的7.6.2版本以及Cerebro集群监控
  19. 房地产业务学习 04 -房企信息化 谁忽悠了谁
  20. 股票基本名词,你知道多少?

热门文章

  1. jmeter线程说明_jmeter 线程组
  2. 深入理解计算机系统第四版_深入理解计算机系统第三版2.4节中文版的一处翻译问题及英文版可能的一处错误...
  3. zookeeper部署
  4. jquery10发送ajax,使用jquery发送一个ajax请求
  5. LinkedList常用方法笔记
  6. Vue:embed结合ElementUI中dialog实现PDF文件预览
  7. python_文件读写_反转文件中的行
  8. ubuntu设置python3.7为默认(python版本切换)
  9. CVPR2021全新Backbone | ReXNet在CV全任务以超低FLOPs达到SOTA水平
  10. 完整的tensorflow训练、保存和离线加载模型(以mnist为例)