vector 是乙個動態陣列, 維護連續的線性空間。
.at()函式可以訪問陣列的任意元素,編譯器會檢測下標是否越界,如果越界就會丟擲異常。
begin()和end()函式可以獲取指向陣列的第乙個元素的迭代器和指向最後乙個元素的迭代器。
front()函式和back()函式可以獲取陣列的第乙個元素和最後乙個元素。
vector只支援push_back()和pop_back()函式在vector的末端進行插入和刪除元素,所以vector只支援單向的插入和刪除。
size()函式可以獲取目前使用空間的大小,,capacity()函式可以獲取預留空間的大小。
但是,要想插入或者刪除末端以外的元素就只能使用insert()或者erase()函式,這就涉及到重新配置新的記憶體空間、vector元素的移動、釋還舊的記憶體空間,
這是乙個大的工程,時間消耗很大。這裡也有一點值得我們注意,所謂的動態空間增加,也並不是在原有的空間之後接續新的空間。
而且由於記憶體空間的變化,指向原vector的所有迭代器就都失效了。
vector的迭代器就是乙個普通的指標。
list是乙個雙向鍊錶,記憶體空間是不連續的.
begin()和end()函式可以獲取指向list的第乙個元素的迭代器和指向最後乙個元素的迭代器。
front()函式和back()函式可以獲取list的第乙個元素和最後乙個元素。
list不僅支援push_back()和pop_back()函式在末端進行插入和刪除元素,還支援push_front()函式和pop_front()函式在首部進行插入和刪除元素。
size()函式可以獲取目前使用空間的大小,但是由於list預留空間是無限的,所以沒有capacity()函式。
list使用insert()函式和erase()函式進行插入刪除元素時,並不用涉及到空間的重新分配。除了被刪除的元素的迭代器失效,其他的迭代器都有效。
lsit迭代器的設計比較複雜,因為要過載operator*、operator++、operator--等元素符。
list還有一些獨有的函式:remove()、unique()、splice()、merge()、sort()。
deque是乙個雙端佇列,是連續記憶體空間(邏輯上),是由一段一段的連續記憶體空間拼接成的。
dque採用map來管理記憶體空間,map裡面存著指向緩衝區的指標,緩衝區用於儲存deque中的元素,預設緩衝區大小為512bytes.
.at()函式可以訪問佇列的任意元素,編譯器會檢測下標是否越界,如果越界就會丟擲異常。
begin()和end()函式可以獲取指向佇列的第乙個元素的迭代器和指向最後乙個元素的迭代器。
front()函式和back()函式可以獲取佇列的第乙個元素和最後乙個元素。
deque不僅支援push_back()和pop_back()函式在末端進行插入和刪除元素,還支援push_front()函式和pop_front()函式在首部進行插入和刪除元素。
size()函式可以獲取目前使用空間的大小,,沒有capacity()函式。
插入或者刪除末端以外的元素就使用insert()或者erase()函式,這之間涉及到迭代器的移動,十分複雜。
總結:看起來vector、list和deque大多操作都是差不多,實際上deque的操作遠比vector、list的複雜,具體可以參考建議不要輕易使用deque.
至於vector和list的使用,可以看具體的需求,應該很好分析使用哪個最好。
MYBATIS RESULTMAP的使用總結
resultmap是mybatis最強大的元素,它可以將查詢到的複雜資料 比如查詢到幾個表中資料 對映到乙個結果集當中。resultmap包含的元素 1 2 3 4 5 6 7 8 9 10 11 12 13 14 如果collection標籤是使用巢狀查詢,格式如下 以下以例項介紹resultma...
VMWare Workstation使用總結幾則
1 安裝 使用ghost盤安裝時一定要注意,需要把空盤建立分割槽並設定為主分割槽 pq的使用形式,進入pq找到磁碟設定為啟用 否則 啟動後顯示boot from network intel e1000 有時裝機忘了,只能從頭再來 安裝64位的虛擬機器時,需要把bios中virtual technol...
VMWare Workstation使用總結幾則
1 安裝 使用ghost盤安裝時一定要注意,需要把空盤建立分割槽並設定為主分割槽 pq的使用形式,進入pq找到磁碟設定為啟用 否則 啟動後顯示boot from network intel e1000 有時裝機忘了,只能從頭再來 安裝64位的虛擬機器時,需要把bios中virtual technol...