1. 程式人生 > >c++ 的vector、array和陣列的比較

c++ 的vector、array和陣列的比較

在c++11中,STL中提拱了一個新的容器std::array,該容器在某些程度上替代了之前版本的std::vector的使用,更可以替代之前的自建陣列的使用。那針對這三種不同的使用方式,先簡單的做個比較:

相同點:

1. 三者均可以使用下表運算子對元素進行操作,即vector和array都針對下標運算子[]進行了過載

2. 三者在記憶體的方面都使用連續記憶體,即在vector和array的底層儲存結構均使用陣列

 

不同點:

1. vector屬於變長容器,即可以根據資料的插入刪除重新構建容器容量;但array和陣列屬於定長容量。

2. vector和array提供了更好的資料訪問機制,即可以使用front和back以及at訪問方式,使得訪問更加安全。而陣列只能通過下標訪問,在程式的設計過程中,更容易引發訪問 錯誤。

3. vector和array提供了更好的遍歷機制,即有正向迭代器和反向迭代器兩種

4. vector和array提供了size和判空的獲取機制,而陣列只能通過遍歷或者通過額外的變數記錄陣列的size

5. vector和array提供了兩個容器物件的內容交換,即swap的機制,而陣列對於交換隻能通過遍歷的方式,逐個元素交換的方式使用

6. array提供了初始化所有成員的方法fill

7. vector提供了可以動態插入和刪除元素的機制,而array和陣列則無法做到,或者說array和陣列需要完成該功能則需要自己實現完成

8. 由於vector的動態記憶體變化的機制,在插入和刪除時,需要考慮迭代的是否失效的問題。

9. vector和array在宣告變數後,在生命週期完成後,會自動地釋放其所佔用的記憶體。對於陣列,如果是採用new[]申請的記憶體空間,必須在使用delete[]完畢後手動釋放其記憶體。

基於上面的比較,在使用的過程中,可以將那些vector或者map當成陣列使用的方式解放出來,可以直接使用array;也可以將普通使用陣列但對自己使用的過程中的安全存在質疑的程式碼用array解放出來。
---------------------
作者:從事IT多年卻沒有寫blog的根爺
來源:CSDN
原文:https://blog.csdn.net/haust_wang/article/details/49848169
版權宣告:本文為博主原創文章,轉載請附上博文連結!