1樓:
這個要去翻原始碼了,stl裡的**說實話,真的看不太懂。
如果不是太糾結於具體細節,可以簡單講講基本的實現思路,大致如下:
vector從功能上來講,屬於順序儲存容器,所以底層實現一般基於陣列。
vector使用模板超程式設計技術實現,具體一點就是編譯器根據使用時指定的實際型別在編譯時執行模板特化,編譯出對應的**。也就是說vectorv1; vectorv2;它們各對應一個特化版本的**。這提高了**的抽象級別,但是對帶來了**膨脹的問題。
vector的重要特性之一就是實現了陣列的動態遞增。簡單來說就是容器內部記錄當前的足最大容量和使用量。當新增元素的時候,如果容器類發現當前的容量已耗盡,容器類會自動地重新分配一個更大容量的陣列,把當前的所有元素copy過去,然後釋放掉舊的陣列,從而實現動態自增,這一切對使用者來說完全透明。
vector提供迭代器來提供統一的遍歷訪問介面,方便與stl中的其它元件進行互動。
這其中會有很多的細節,比如:
1. 是否允許vector在必要時縮小自身容量?
2. vector容量耗盡後的遞增量是多少?
3. 是否應該提供執行緒安全容器?
有些東西可能真的需要去翻原始碼去看才能搞明白。或者可以參考侯捷的《stl原始碼剖析》。其實vector本身的實現並不會太複雜,它的實現思路也很簡單,但是設計層面的一些取捨就需要經過仔細考量了。
一般來說,stl是一個足夠堅實的後盾,我們會頻繁地使用它,以構建健壯高效的軟體。能夠理解stl裡的一些設計思想和實現方式,對提高我們的程式設計思維和程式設計能力會所幫助。
2樓:匿名使用者
用類和模板技術實現的。
c++中stl的vector容器的解構函式怎麼用?
3樓:
解構函式不需
bai要直接呼叫。而du
是在物件失效時zhi自動呼叫的。所謂物件失dao效,是指程式已經執行版出區域性變數權的作用域或者是對物件指標進行delete時。
比如void foo()
//當此函式執行結束時,自動呼叫array的解構函式~vector()。
4樓:匿名使用者
提供你一個辦法:
在檔案中,下一個斷點
~vector()
看看會不會執行到,這樣,你就知道,你不必自己呼叫 ~vector(),系統會做的。
我的機器上,是第 386 行。試試看
5樓:匿名使用者
這裡不需要手動釋抄放,如樓上幾位所說。我說說解構函式呼叫的時機吧!
記憶體管理應該明白吧!
這裡你的vector是在棧上的,所以main函式執行完後,會自動對棧進行**,對棧進行**時,會自動呼叫vector物件的解構函式,因此不需要顯式呼叫。
6樓:匿名使用者
~vector();不需要你呼叫,呼叫會出錯,程式會自動呼叫的,
c++ stl::vector中sort函式中仿函式能支援傳入別的變數嗎
7樓:匿名使用者
用全域性變數或者靜態(全域性靜態或者類的靜態成員)都可以。
或者把norm_age作為students的普通成員。不過沒必要捨近求遠,作為類的靜態成員是最合適的選擇。
非零向量a b滿足a b的絕對值等於b的絕對值,且a 2b的絕對值大於mb的絕對值恆成立,則實數m的取值範圍
看了其他答案,發現都有所偏差,我給出一個合理答案。用x表示向量a,b夾角,此外向量直接說 由已知得出 a模平方 2 a模 b模 cosx 0 i 不能直接說向量a 2b因為向量a和向量a 2b可能垂直!再由問題平方得a模平方 4 b模平方 4 a模 b模 cosx m平方 b模平方 ii 把 i 式...
r語言中,如何計算向量裡不同元素的個數
在1到80裡隨 bai機抽取100個數,du可重複 x sample 1 80,100,replace t 看看有zhi 多少不同的元素,unique x 把x中出現過dao的元素提取出來專,length 看看有多少個屬 length unique x 1 52 直接利用table data 命令就...
線性代數裡的特徵向量和特徵值的含義
線性代來 數是數學的一個分自支,它的研究物件是向量,向量空間 或稱線性空間 線性變換和有限維的線性方程組。向量空間是現代數學的一個重要課題 因而,線性代數被廣泛地應用於抽象代數和泛函分析中 通過解析幾何,線性代數得以被具體表示。線性代數的理論已被泛化為運算元理論。由於科學研究中的非線性模型通常可以被...