1. 程式人生 > >c++入門之內置數組和array比較

c++入門之內置數組和array比較

註意 很多 [] 類類型 pan 定義 安全 符號 訪問方式

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
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

c++入門之內置數組和array比較