在c++11中,stl中提拱了乙個新的容器std::array,該容器在某些程度上替代了之前版本的std::vector的使用,更可以替代之前的自建陣列的使用。那針對這三種不同的使用方式,先簡單的做個比較:
相同點:
三者均可以使用下表運算子對元素進行操作,即vector和array都針對下標運算子進行了過載三者在記憶體的方面都使用連續記憶體,即在vector和array的底層儲存結構均使用陣列不同點:
vector屬於變長容器,即可以根據資料的插入刪除重新構建容器容量;但array和陣列屬於定長容量。
vector和array提供了更好的資料訪問機制,即可以使用front和back以及at訪問方式,使得訪問更加安全。而陣列只能通過下標訪問,在程式的設計過程中,更容易引發訪問 錯誤。
vector和array提供了更好的遍歷機制,即有正向迭代器和反向迭代器兩種
vector和array提供了size和判空的獲取機制,而陣列只能通過遍歷或者通過額外的變數記錄陣列的size
vector和array提供了兩個容器物件的內容交換,即swap的機制,而陣列對於交換只能通過遍歷的方式,逐個元素交換的方式使用
array提供了初始化所有成員的方法fill
vector提供了可以動態插入和刪除元素的機制,而array和陣列則無法做到,或者說array和陣列需要完成該功能則需要自己實現完成
由於vector的動態記憶體變化的機制,在插入和刪除時,需要考慮迭代的是否失效的問題。
vector和array在宣告變數後,在生命週期完成後,會自動地釋放其所占用的記憶體。對於陣列,如果是採用new申請的記憶體空間,必須在使用delete完畢後手動釋放其記憶體。
基於上面的比較,在使用的過程中,可以將那些vector或者map當成陣列使用的方式解放出來,可以直接使用array;也可以將普通使用陣列但對自己使用的過程中的安全存在質疑的**用array解放出來。
**:
陣列和陣列函式
1 如果對全部元素賦初值 即提供全部初始資料 則定義陣列時對第一維的長度可以不指定,但第二維的長度不能省。2.gets 字元陣列 1 格式 gets 字元陣列名 2 作用 從終端輸入乙個字串到字元陣列,並且得 到乙個函式值。該函式值是字元陣列的首位址。gets函式這裡注意 如果和scanf s k ...
類陣列和陣列
類陣列,顧名思義,和陣列很像,但不是陣列,是乙個物件 理解 var obj 這個物件就能像陣列那樣取值 obj 0 aobj 1 bobj 2 3這就是類陣列,常見的類陣列有 函式的引數arugments,dom方法返回的結果 比如通過document.queryselectorall得到的列表 類...
類陣列和陣列
arraylike類陣列有著陣列一樣的資料,但是沒有陣列的實力方法,並且是乙個object。乙個偽陣列 var a 題目 var a a.push 1 a.push 2 a object 4 empty 2,1,2,push splice why?看看mdn push是按照length來判斷當前插入...