c++入門之內置數組和array比較
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比較