C 實踐 STL容器reserve

2021-09-16 14:23:10 字數 841 閱讀 7691

我們在使用一些容器型別時,如果事先能大體知道儲存空間的大小,使用成員函式reserve可以有效減少容器重新分配記憶體的次數。

下面的**從實際專案改編而來。

#include #include int main()
上面程式使用clang++/g++ -std=c++17輸出如下:

the size of numbers: 0

the first elem of numbers: 10

the second elem of numbers: 20

之所以出錯可以歸為兩點:

容器的capacitysize是兩個概念,不可混淆

前者是容器實際分配的記憶體大小,後者是容器內儲存的元素個數。很明顯,capacity >= size。**中的的reserve實際上改變capacity,沒有改變size。要改變size,可以使用push_back等成員函式。

!!執行時不報錯

因效率考量,operator操作不進行邊界檢查。要求我們不能違背c++的「慣用法」,否則編譯器也幫不了我們。

對應的邊界檢查版本std::vector::at

補充一句:rust的預設的operator行為等價於c++的std::vector::at,執行時會報錯。

C 容器(STL容器)

容器 container 用於存放資料的類模板。可變長陣列 鍊錶 平衡二叉樹等資料結構在stl中都被實現為容器。在使用容器時,即將容器類模型例項化為容器類,會指明容器中存放的元素是什麼型別。容器可以分為兩大類 順序容器和關聯容器 順序容器有可變長動態陣列vector 雙端佇列deque 雙向鍊錶li...

容器中 reserve和resize

vector 的reserve增加了vector的capacity,但是它的size沒有改變!而 resize 改變了vector的capacity 同時也增加了它的size!原因如下 reserve是容器預留空間,但在空間內不真正建立元素物件,所以在沒有新增新的物件之前,不能引用容器內的元素。加入...

C 學習 STL容器

vector 向量 線性容器 用標準模板,記得加上相應的標頭檔案 include include using namespace std int main 設定向量容量 初始化 v1 0 8 v1 1 8 v1 2 8 宣告迭代器 標準他屬於那個模板 vector iterator v1 iter ...