容器分為:順序容器,關聯容器,容器適配類
是一種各個元素之間有順序關係的線性表
- verctor 將元素保持在連續的儲存空間
- deque
- list 雙鏈表,從任何地方快速插入與刪除
2.1 vector
相當於陣列,可以通過下標隨機訪問,速度很快。但是在容器的中間位置新增和刪除檔案非常耗時。因為一次插入和刪除操作都需要移動插入和刪除位置之後的所有元素,來保護連續的儲存。而且新增元素有時還需要分配額外的儲存空間,拷貝資料到新空間,並釋放老的空間
在建立乙個vector後,它會自動在記憶體中分配一塊連續的記憶體空間進行資料儲存,初始的空間大小可以預先指定或由vector 預設指定,這個大小即capacity()函式的返回值。當儲存的資料超過分配的空間時,vector會重新分配一塊記憶體塊,但這樣的分配很耗時,在重新分配空間時會做這樣的動作:
1.vector 會申請一塊更大的記憶體塊,然後將原來的資料拷貝到新的記憶體塊中,接著銷毀記憶體塊中的物件,最後將原來的記憶體空間釋放掉
2.如果vector保持的資料量很大時,這樣操作會導致槽糕的效能。
2.2 list
這是乙個線性鍊錶結構,他的資料由若干個節點構成,每乙個節點都包括乙個資訊塊,乙個前驅指標和乙個後驅指標。他無需分配指定的記憶體塊且可以任意伸縮,這是因為它儲存在非連續的記憶體空間中,並且由指標有序的元素鏈結起來
容器使用鍊錶在任何位置新增和刪除速度很快,但是代價是不支援隨機訪問,為了乙個元素訪問,需要遍歷整個容器
容器使用鍊錶
2.3 deque
這是一種優化了的,對兩端新增和刪除操作的順序容器。允許較為快速的隨機訪問,它不想vector把所有物件保持在一塊連續的記憶體塊,而是採用多個連續的儲存塊,並且在乙個對映結構中保持對這些塊及其順序的追蹤。向兩端新增和刪除的開銷很小。不需要重新分配空間,所以向末端增加元素比vector更有效。deque 是對vector和list的優缺點結合,介於二者之間的容器
各個元素之間沒有嚴格的物理上的順序關係
- set 快速查詢,不允許重複值
- multiset 快速查詢,允許重複值
- map 對多對映,基於關鍵字查詢,不允許重複值
- multima 對多對映,基於關鍵字查詢,允許重複值
容器的介面
- stack 後進先出
- queue 先進先出
- proority_queue 最高優先順序元素總是第乙個出列
C 系列 44 C 記憶體洩露
首先我們需要明確,記憶體洩露是記憶體丟了嗎?答案當然是否定的,不可能買了8g的記憶體執行程式之後變成了2g。記憶體是不會像物理意義上的丟失的,丟的只是指向這一片區域的指標。記憶體洩漏指因為疏忽或錯誤造成程式未能釋放已經不再使用的記憶體的情況。記憶體洩漏並不是指內存在物理上的消失,而是應用程式分配某段...
C 學習之路(44) C 大數問題
1.大數相加 1 從結尾開始每位相加 2 兩個整數長度不相等 肯定有乙個已經加完了,再把沒有加完的加上去 3 最高位有進製,要再進一位 4 結果字串逆序 2.大數相乘 分析 12 34 乘數 12 被乘數 34 1 先把乘數列出來,第i行列左起第i位數,列n次 n為乘數的位數 第二行起每次右移一位 ...
牛客挑戰賽44 C 有用的 LCM
on考慮將lcm lcmlc m分解質因數lcm pi cilcm prod p i lcm p ici 容易發現答案即為 ci sum c i ci 顯然想到對n nn進行根號分塊 不大於n sqrt n n 的質因數對答案做log loglo g次貢獻 大於n sqrt n n 的質因數只對答案...