vector的優點:
(1)、可以使用下標訪問個別元素。
(2)、迭代器可以按照不同的方式遍歷容器。
(3)、可以在容器的末尾增加或刪除元素。
和其他標準順序容器相比,vector能更有效訪問容器內的元素和在末尾新增和刪除元素,而在其他位置新增和刪除元素,則不及其他順序容器,在迭代器和引用也不比lists支援的好。
vector記憶體管理與效率:
1、vector內部是動態陣列實現的,支援隨機訪問。
2、只要有元素需要插入而且容器的容量不足時就會發生重新分配,包括他們維護的原始記憶體分配和**,物件的拷貝和析構和迭代器,指標和引用的失效。所以,避免重新分配的關鍵是使用reserve盡快把容器的容量設定為足夠大,最好在容器構造後立刻進行。如果有大量資料需要進行push_back(),應當使用reserve()函式提前設定其容量大小,否則導致多次擴容導致效率低下。
3、vector是按照現在容量的一倍進行增長,其分配的是一塊連續的記憶體空間,每次容器增長,並不是在原有連續記憶體空間後再進行簡單的疊加,而是重新申請一塊更大的新記憶體,並把元素逐個賦值過去,同時銷毀舊的記憶體。這時原有指向舊的記憶體空間的迭代器已經失效,所以操作容器時,迭代器要及時更新。
map:
map的內部資料組織,是自建一顆紅黑樹(一種非嚴格意義上的平衡二叉樹),具有對資料自動排序的功能。
map的插入方式有三種:
1)、用insert函式插入pair資料:
maptmpmap;
tmpmap.insert(pair(1,「student1」));
2)、用insert函式插入value_type資料:
maptmpmap;
tmpmap.insert(map::value_type(1,「student1」));
3)、用陣列方式插入:
maptmpmap;
tmpmap[1] = 「student1」;
注意,用insert插入時當map中有這個關鍵字時,insert操作是插入不了的。用陣列會覆蓋。
C 後台開發面試 STL相關
六大元件及其關係 空間配置器 容器 迭代器 演算法 仿函式 介面卡 記憶體管理 記憶體配置和物件構造 析構分開。使用雙層級配置器 第一級直接 malloc,free 第二級記憶體池 維護 16 個自由鍊錶 迭代器 一種智慧型指標 vector 動態分配的陣列,連續線性空間 維護 3 個迭代器 sta...
閱讀STL原始碼剖析筆記 vector
初步閱讀vector 的摘要原始碼,我找到了一些我覺得挺重要的東西,在stl原始碼剖析裡面,vector 的實現中有這麼幾個函式 void push back const t x else iterator erase iterator position finish destroy finish ...
敏捷開發藝術 閱讀筆記
承諾 commitment 我們對團隊承擔的工作有了更大的掌控,更加堅定了對成功的承諾。專注 focus 我們將全部精力和技能都聚焦在所承諾的工作上,團隊同心協力來促使更快的交付。公開 openness 團隊通過自己的方式共同完成工作,每個成員都對進展和問題瞭如指掌。敬重 respect 團隊中的每...