---
title: "C++内置数组和array的比较"
author: "Perrin Yong"
author_profile: https://www.pystone.net/profile/
published_by: "Perrin Yong"
canonical: https://www.pystone.net/notes/cpp-builtin-array-vs-std-array/
type: note
content_role: unspecified
visibility: public
id_stability: rename-stable
source_path: "10-计算机、信息技术与工程/02-编程语言与运行时/C++/C++内置数组和array的比较.md"
content_hash: e2e08c9eeeb80f01d18fefb1c8f6569d4ccd4289326219fd0a7481e3864b1bb2
knowledge_version: 224c990773de.5fa8af6e39fa
site_commit: 224c990773de166d23a886306577dd90379529ce
notes_commit: 5fa8af6e39fa3891d1b9b4832bfa6c4e0ecaaf0a
---
# C++内置数组和array的比较

﻿# C++内置数组和array的比较

> 创建时间：2020/1/16 21:38

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