後台開發閱讀筆記 STL之vector,map

2021-08-30 04:37:09 字數 995 閱讀 5467

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 團隊中的每...