C 中的STL序列容器array

2021-09-25 23:40:06 字數 1606 閱讀 1384

今天來講一下stl中的array這個陣列容器的簡單使用。

array(陣列容器)是乙個長度固定的序列,有 n 個 t 型別的物件,不能增加或刪除元素。

array模板定義了一種相當於標準陣列的容器型別。它是乙個有 n 個 t 型別元素的固定序列。除了需要指定元素的型別和個數之外,它和常規陣列沒有太大的差別。顯然,不能增加或刪除元素。

模板例項的元素被內部儲存在標準陣列中。和標準陣列相比,array 容器的額外幵銷很小,但提供了兩個優點:如果使用 at(),當用乙個非法的索引訪問陣列元素時,能夠被檢測到,因為容器知道它有多少個元素,這也就意味著陣列容器可以作為引數傳給函式,而不再需要單獨去指定陣列元素的個數。

使用array需要標頭檔案#include;

std::arrayarr;

std::arrayarr = ;

也可以像常規陣列那樣進行賦值,

std::arrayarr = ;

初始化時前5個元素分別1.0,2.0,3.0,4.0,5.0,然後剩下的元素都將置為0;

也可以通過fill()函式,可以將所有的元素設定為給定的值

arr.fill(12345);

可以使用[ ]來訪問arr中的元素:

arr[4] = arr[2] + 2.0 * arr[1];

這樣做也是可以的,但是這樣做的話沒有進行任何的邊界檢查,所有一旦有越界,就不會被檢測到,

那麼為了防止出現越界情況,我們可以使用它的成員函式at();

arr.at(4) = arr.at(2) + 2.0 * arr.at(1);

當傳給at()的下標是乙個越界值的時候,這時會丟擲乙個std::out_of_rang異常。一般情況下推薦使用at(),除非可以確定沒有越界。之所以operator[ ]的實現裡沒有進行邊界檢查是因為效能。如果每次訪問元素都去檢查下標,毫無疑問會產生很多開銷,當可以確定沒有越界是,使用[ ]就能避免很多開銷。

當我們需要知道arr的大小的時候,就可以用size()來得到元素的個數。

同樣也可以用empty()來確定乙個陣列容器是否為空,如果為空,就會返回true。

但是乙個陣列容器在生成的時候就已經確定了元素個數,所以生成空的陣列容器的唯一方式就是,建立時將模板的第二個引數設定為0;並不是說empty()沒有意義,對於其他的元素可變,或者可以刪除的容器來說,他們使用empty的機制是一樣的,提供的是乙個一致性的操作。

陣列容易的成員函式front()和back()分別返回第乙個元素和最後乙個元素的引用,

陣列模板定義了成員函式begin()和end(),分別返回指向第乙個元素和最後乙個元素的位置的隨機訪問迭代器。

array::iterator 識別符號;

它可以像指標一樣使用,支援++;

array::iterator it = arr.begin();
array同樣支援反向迭代器

array::reverse_iterator 識別符號;

array::reverse_iterator it2= arr.rbegin();
但是array不支援插入迭代器,我們在之前已經說過,這個陣列容器建立時就已經確定了大小,所以不能使用插入迭代器。

關於array的一些簡單的使用就這樣了。

(三)STL序列容器(array)

1.std array arr 建立10個浮點型元素,但是未顯示指定10個元素的值,因此各個元素的值是不確定的,array容器是不會做預設初始化操作 2.std array arr 所有元素預設初始化為0.03.std array arr 只初始化了前4個元素,剩餘的元素都被初始化為0.0 incl...

STL基礎 容器array

array只是把c風格的array做了一下class的封裝。與array基本無差異。arrayc default建構函式,建立乙個array帶有default initalized元素 arrayc c1 copy建構函式 arrayc c1 copy建構函式 arrayc move c1 move...

STL容器 array陣列

前言 c 11中引入了array容器,array是序列容器的一種。array很類似於一般的陣列,例如,array在棧上分配連續的記憶體來儲存元素,並且array的大小是不可以改變的,這也就是說,可以修改array中元素的值,但不能向array中插入和刪除元素 其次 array是原生陣列的封裝,它存放...