您好,登錄后才能下訂單哦!
庫:沒錯誤,比框架小,用來解決小問題。
框架:解決開發中某個功能很全。
STL:標準規范,代碼不一樣,風格,框架有差異
包括:
算法
容器
STL包括:
容器:容納數據的結構
迭代器:扮演容器和算法的膠合劑
空間配置器:內存空間(動態分配)的分配與管理
配接器:一種修飾容器的東西:stack,queue,eg:反向迭代器
更約束,不支持遍歷
算法#include<algorithm>
仿函數
迭代器:指向一個迭代器,類似指針(一個類型封裝的指針)
迭代器失效:類似野指針,和刪除有關
erase參數
1.一個位置(迭代器)
2.位置區域(迭代器)
迭代器(iterator)是一個可以對其執行類似指針的操作(如:解除引用(operator*())和遞增(operator++()))的對象,我們可以將它理解成為一個指針。但它又不是我們所謂普通的指針,我們可以稱之為廣義指針,你可以通過sizeof(vector::iterator)來查看,所占內存并不是4個字節。
首先對于vector而言,添加和刪除操作可能使容器的部分或者全部迭代器失效。那為什么迭代器會失效呢?vector元素在內存中是順序存儲,試想:如果當前容器中已經存在了10個元素,現在又要添加一個元素到容器中,但是內存中緊跟在這10個元素后面沒有一個空閑空間,而vector的元素必須順序存儲一邊索引訪問,所以我們不能在內存中隨便找個地方存儲這個元素。于是vector必須重新分配存儲空間,用來存放原來的元素以及新添加的元素:存放在舊存儲空間的元素被復制到新的存儲空間里,接著插入新的元素,最后撤銷舊的存儲空間。這種情況發生,一定會導致vector容器的所有迭代器都失效。
我們看到實現上述所說的分配和撤銷內存空間的方式以實現vector的自增長性,效率是極其低下的。為了使vector容器實現快速的內存分配,實際分配的容器會比當前所需的空間多一些,vector容器預留了這些額外的存儲區,用來存放新添加的元素,而不需要每次都重新分配新的存儲空間。你可以從vector里實現capacity和reserve成員可以看出這種機制。
capacity和size的區別:size是容器當前擁有的元素個數,而capacity則指容器在必須分配新存儲空間之前可以存儲的元素總數。
vector迭代器的幾種失效的情況: 1.當插入(push_back)一個元素后,end操作返回的迭代器肯定失效。 2.當插入(push_back)一個元素后,capacity返回值與沒有插入元素之前相比有改變,則需要重新加載整個容器,此時first和end操作返回的迭代器都會失效。 3.當進行刪除操作(erase,pop_back)后,指向刪除點的迭代器全部失效;指向刪除點后面的元素的迭代器也將全部失效。
deque迭代器的失效情況: 在C++Primer一書中是這樣限定的: 1.在deque容器首部或者尾部插入元素不會使得任何迭代器失效。 2.在其首部或尾部刪除元素則只會使指向被刪除元素的迭代器失效。 3.在deque容器的任何其他位置的插入和刪除操作將使指向該容器元素的所有迭代器失效
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。