C/C++之vector的內存管理和效率

? ? ?(1)vector容器支持隨機訪問,其內部是通過動態數組實現的;

? ? ?(2)當vector執行insert或者push_back時,如果此時動態數組的內存不夠用,則會重新分配當前大小的1.5~2倍的新內存區,把原來數組的內容復制過去;

? ? ?(3)為了減少動態數組的不斷分配,通過采用reverse()來提前設定容器的大小。

? ? ?(4)每一次容器進行擴容的時候,原容器內的內存,迭代器,指針和引用都會失效;

? ? ?(5)標準容器的四個成員函數(vector和string)

? ? ? ? ? ? ?1)size()函數:獲得容器中元素的個數;

? ? ? ? ? ? ?2)capacity()函數:容器在分配那塊內存上可以容納的元素的個數;

? ? ? ? ? ? 3)resize(n)函數:強制將容器改為容納為n個數據;調用之后函數返回為n,如果n小于當前大小,容器尾部元素被銷毀;如果n大于當前大小,新構造的元素會添加到末尾;如果n大于當前容量,在元素加入前會進行重新分配;

? ? ? ? ? ? 4)reserve(n):強制容器把它的容量改為不小于n,提供的n不小于當前所需大小。如果n小于當前容量,則vector會忽略它,什么都不調用,string可能會把它的容量減小為size()和n中的大數,但是string的大小不變;

? ? ? ?(6)使用“交換技巧”來修整vector過剩空間/內存

? ? ? ? ? ? ? ? ? ? ? 使用語句:vector<int>(ivec).swap(ivec);

? ? ? ? ? ? ? ? ? ? ? ? ? ?vector<Int>(ivec)表示建立一個臨時的vector,它是ivec的一份拷貝,但是vector的拷貝構造函數只分配拷貝的元素需要的內存,所以這個臨時的vector沒有多余的容量,然后再實現vector和ivec交換數據萬能充,但是ivec只有臨時變量修整后的容量,而臨時變量擁有曾經ivec沒有用到的過剩容量;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/382287.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/382287.shtml
英文地址,請注明出處:http://en.pswp.cn/news/382287.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

匯頂軟件開發初面總結20180921

博客參考&#xff1a;C中的多態和內部實現&#xff1a;https://www.cnblogs.com/qiaoconglovelife/p/5128523.html 虛函數表存放的地址&#xff1a;https://blog.csdn.net/jiary5201314/article/details/52627630 為什么STL和linux都采用紅黑樹作為平衡樹的實現&#xff1a;htt…

LeetCode 21. 合并兩個有序鏈表 golang

遞歸 func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode {if nil l1 {return l2}if nil l2 {return l1}if l1.Val < l2.Val {l1.Next mergeTwoLists(l1.Next, l2)return l1} else {l2.Next mergeTwoLists(l1, l2.Next)return l2} }Me(存在問題)非遞歸版本實現…

深信服C/C++技術一面二面20180924

技術一面&#xff1a;主要是一些關于數據結構和C/C相關的內容 1)鏈表和數組的相同點和不同點&#xff1b; 2&#xff09;了解靜態鏈表嗎&#xff1f;怎么用數組實現靜態鏈表&#xff1f; 3&#xff09;使用庫函數strcpy應該注意的問題有哪些&#xff1f; 4&#xff09;鏈表…

83. 刪除排序鏈表中的重復元素 golang

83. 刪除排序鏈表中的重復元素 golang Me func deleteDuplicates(head *ListNode) *ListNode {if head nil || head.Next nil {return head}result : headfor head ! nil && head.Next ! nil {for head.Val head.Next.Val {head.Next head.Next.Nextif head.Next…

《C++ Primer第五版》習題答案

博客轉載&#xff1a;https://blog.csdn.net/misayaaaaa/article/details/53786215 第一章&#xff1a;https://blog.csdn.net/misayaaaaa/article/details/53200001 第二章&#xff1a; 1~10題&#xff1a;https://blog.csdn.net/misayaaaaa/article/details/53200773 11~…

《C++ Primer第五版》第一章-------IO機制和注釋縮進

C Primer第一章的內容相對來說比較基礎&#xff0c;主要是對C中程序編譯的流程、C中的IO機制&#xff0c;for和while循環的介紹、類的構成和注釋方法及縮進方法做了簡要的介紹&#xff0c;本次博客主要從C中的IO機制和注釋縮進等方面做一個總結記錄&#xff0c;如果在總結過程中…

19.刪除鏈表的倒數第N個節點 golang

官解 一遍寫出來有難度。 [1,2] 2 [2][1,2]1 [1]func removeNthFromEnd(head *ListNode, n int) *ListNode {if n < 0 || head nil {return head}fast : headfor i : 1; i < n && fast ! nil; i{fast fast.Next}if fast nil {return head.Next}slow : headfor…

《C++ Primer 第五版》第二章(1-4小節)------基本內置類型,初始化和賦值及聲明和定義,指針和引用,const和constexpr

C Primer第二章的內容主要介紹了變量和基礎類型&#xff0c;包括C語言定義的基礎內置類型、變量的定義及聲明、符合類型如指針及引用的介紹和const及常量表達式constexpr的介紹&#xff0c;本次博客也從這四個方面進行系統的介紹&#xff0c;如果有不足之處&#xff0c;還望其他…

455. 分發餅干 golang

455. 分發餅干 Me func findContentChildren(g []int, s []int) int {if len(s) 0 {return 0}sort.Ints(g)sort.Ints(s)var count, i, j int 0, 0, 0for { if g[i] < s[j] {i, j, count i1, j1, count1} else {j}if i > len(g) || j > len(s) {return count}}re…

《C++ Primer 第五版》第二章(第5小節)——using和typedef,auto和decltype總結

1.using和typedef&#xff08;作用&#xff1a;定義類型別名&#xff09; 1)typedef和using都可以用來定義一個類型別名&#xff0c;二者在類型別名上定義沒有區別。只是需要注意的是類型和類型別名的順序&#xff0c;使用typedef定義類型別名的結構為 typedef 類型 類型別名&a…

204. 計數質數 golang

一次嘗試&#xff0c;如何擊敗100%用戶&#xff08;用時&#xff0c;內存&#xff09; func countPrimes(n int) int {if n 499979 {return 41537}if n 11 {return 4}if n 12 {return 5}if n 13 {return 5}if n 14 {return 6}if n 15 {return 6}if n 10 {return 4}if n …

leetcode內存消耗

leetcode內存消耗最是多少 執行用時 :0 ms, 在所有 Go 提交中擊敗了100.00%的用戶 內存消耗 :1.9 MB, 在所有 Go 提交中擊敗了94.81%的用戶測試鏈接 Test

《C++ Primer 第五版》(第2.5節,第3.1-3.4節) ——采用預處理功能編寫頭文件,string初始化和字符操作,vector初始化和迭代器

1.采用預處理功能編寫頭文件 在頭文件定義(頭文件中的內容是只能被定義一次的實體)過程中&#xff0c;為了防止頭文件重復包含的情況&#xff0c;采用預處理器的一個頭文件保護符功能,格式為&#xff1a;{ #ifndef 預處理變量(通常大寫) #define 預處理變量 #end…

《C++ Primer 第五版》(第3.5-3.6節) ——C++中的內置數組類型,string對象和C風格字符串

1.C中的內置數組類型 C中的數組是內置數據類型&#xff0c;但不是基礎數據類型而是構造數據類型&#xff0c;是有限個相同數據、占據著連續物理存儲空間的有序集合。而內置數據類型定義的下標運算符可以處理負值運算(只要在數組范圍之內)&#xff0c;這和vector及string的下標運…

793. 階乘函數后K個零 golang

Me(AC 33 / 44 個通過測試用例) func preimageSizeFZF(K int) int {count : 0for i : 0; i < 1000000; i {if trailingZeroes(i) K {count}}fmt.Println(count)//fmt.Println(trailingZeroes(25))return count}func trailingZeroes(n int) int {if n 0 {return 0}return …

小程序radio單選框回顯

話不多說&#xff0c;效果圖如下&#xff1a; 具體代碼如下&#xff1a; <radio-group name"radio" bindchange"getSex"><label><radio value"1" checked"{{xingbie1}}" />男</label><label><radio…

172. 階乘后的零 golang

官解 一般很難想到這個方向&#xff0c;有點類似數學歸納法&#xff1f; func trailingZeroes(n int) int {if n 0 {return 0}return trailingZeroes(n / 5) n / 5 }

《C++ Primer 第五版》(第4.11節類型轉換) ————關于無符號數和有符號數的運算探究

1.關于無符號數和有符號數的運算 關于無符號數和有符號數的運算&#xff0c;在我看來一直是覺得只要有無符號數和有符號數的運算&#xff0c;有符號數就轉化為無符號數&#xff0c;但是在《C Primer 第五版》的p142介紹&#xff0c;關于無符號數和有符號數的運算如下規定的&…

《C++ Primer 第五版》(第4.1-4.11節) ——運算符的執行順序問題,負值坐商取余問題,數值的移位操作

1.運算符的執行順序問題 在C語言中&#xff0c;沒有明確規定大多數二元運算符的求值順序&#xff0c;這給編譯器留下了余地&#xff0c;這種策略是在代碼生成效率和程序潛在缺陷之間的權衡。 對于運算符而言&#xff0c;如果運算符的兩個對象中&#xff0c;存在表達式指向并修改…

543. 二叉樹的直徑 golang

文章目錄543. 二叉樹的直徑example正確解法question代碼&#xff08;wrong)543. 二叉樹的直徑 概要: 借鑒了這個題的代碼。可是有一個測試用例過不去 https://blog.csdn.net/csdn_kou/article/details/104122067 example 給定一棵二叉樹&#xff0c;你需要計算它的直徑長度。一…