STL - Container

1. vector

元素可重復(fù)的長(zhǎng)度可變的線性表,類(lèi)似 java 的 ArrayList

成員函數(shù)
\color{red}{ Access }
operator[] reference operator[] (size_type n);
const_reference operator[] (size_type n) const;
表明可以通過(guò)數(shù)組以角標(biāo)方式訪問(wèn)囚衔,即將其視作指針;若角標(biāo)越界甩苛,則行為未知
at() reference at (size_type n);
const_reference at (size_type n) const;
獲取指定角標(biāo)的元素 会宪,如果不存在該角標(biāo),那么拋出越界異常
data() value_type* data() noexcept;
const value_type* data() const noexcept;
獲取該vector實(shí)例的首地址元践,即指針
front() reference front();
const_reference front() const;
獲取該vector實(shí)例的首個(gè)元素
back() reference back();
const_reference back() const;
獲取該vector實(shí)例的末尾元素
\color{red}{ Capacity }
empty() bool empty() const;

容器是否為空(沒(méi)有元素)
size() size_type size() const;

容器內(nèi)元素的數(shù)量韭脊,非負(fù)數(shù)
capacity() size_type capacity() const;

容器已分配內(nèi)存可存放元素的數(shù)量,一般略大于 size()
max_size() size_type max_size() const;

最大的元素?cái)?shù)量单旁,像是固定值沪羔? 0x3FFFFFFF
resize() void resize (size_type n, value_type val = value_type());

容器的元素?cái)?shù)量置為 n;
若 n 小于原大小象浑,則從尾部開(kāi)始刪除蔫饰,剩余n個(gè)元素,capacity不會(huì)變化融柬;
若 n 大于原大小死嗦,則添加元素,若指定值粒氧,則新增元素都等于該值越除,若不指定則是0,capacity隨之變化。
reserve() void reserve (size_type n);

請(qǐng)求 vector 的容量(capacity)至少可以包含 n 個(gè)元素摘盆。
若 n 小于原capacity翼雀,則無(wú)變化;若 n 大于原capacity孩擂,則capacity=n狼渊。
shrink_to_fit() void shrink_to_fit();

使得 capacity = size
\color{red}{ Iterators } *iterator 即可取到迭代器對(duì)應(yīng)的元素
begin() iterator begin();
const_iterator begin() const;
end() iterator end();
const_iterator end() const;
cbegin() const_iterator cbegin() const noexcept;
cend() const_iterator cend() const noexcept;
rbegin() reverse_iterator rbegin();
const_reverse_iterator rbegin() const;
rend() reverse_iterator rend();
const_reverse_iterator rend() const;
crbegin() const_reverse_iterator crbegin() const noexcept;
crend() const_reverse_iterator crend() const noexcept;
\color{red}{ Modifier }
clear() void clear();

清空內(nèi)部元素,size變成0类垦,但capacity不變
push_back() void push_back (const value_type& val);

從尾部添加指定元素
pop_back() void pop_back();

從尾部刪除一個(gè)元素
insert() iterator insert (iterator position, const value_type& val);
向指定位置的前面狈邑,插入元素,返回的迭代器指向剛剛插入的元素

void insert (iterator position, size_type n, const value_type& val);
向指定位置的前面蚤认,插入 n 個(gè)指定值的元素

template <class InputIterator> void insert (iterator position, InputIterator first, InputIterator last);
向指定位置的前面米苹,插入迭代器的 [first, last) 之間的元素
erase() iterator erase (iterator position);
刪除指定迭代器的元素

iterator erase (iterator first, iterator last);
刪除迭代器 [first, last) 之間的元素
swap() void swap (vector& x);

交換兩個(gè)vector的所有元素
assign() void assign (size_type n, const value_type& val);
清空容器,指定容器的大小砰琢,并全部賦予初值

template <class InputIterator> void assign (InputIterator first, InputIterator last);
清空容器蘸嘶,將迭代器 [first, last) 之間的元素放入容器中
emplace() template <class... Args>iterator emplace (const_iterator position, Args&&... args);

在指定的位置(iterator)的前面,插入一個(gè)新元素陪汽,該新元素以第二個(gè)及后續(xù)參數(shù)作為構(gòu)其造函數(shù)的參數(shù)
emplace_back() template <class... Args> void emplace_back (Args&&... args);

在vector尾部插入一個(gè)新元素训唱,該新元素以第二個(gè)及后續(xù)參數(shù)作為其構(gòu)造函數(shù)的參數(shù)

2. set

元素 \color{red}{不} 可重復(fù)的長(zhǎng)度可變的線性表
與 map 對(duì)外提供了相同的方法(方法名相同),僅參數(shù)或元素類(lèi)型等不同挚冤。
可能與 java 類(lèi)似况增,也是由 map 實(shí)現(xiàn)的。

3.array

元素可重復(fù)的長(zhǎng)度 \color{red}{不} 可變的線性表
std::array<type, fixed-length> arr;

成員函數(shù)
\color{red}{ Access } 同 vector
\color{red}{ Capacity } 同 map
\color{red}{ Iterators } 同 vector
\color{red}{ Modifiers }
fill() void fill (const value_type& val);

用指定的值训挡,填充數(shù)組
swap() 交換兩個(gè)容器的內(nèi)容

5. other linear tables(list, stack, queue, deque)

list:序列容器巡通,允許常量時(shí)間內(nèi)的操作和移除操作,可雙向操作舍哄。
stack: FIFO 棧,只能操作線性表的一端誊锭;
queue:FIFO 隊(duì)列表悬,線性表一端新增,另一端刪除丧靡;
deque:隊(duì)列蟆沫,線性表的兩端均可操作;

6. map

鍵值對(duì)温治,同一個(gè) map 內(nèi) key 唯一饭庞。

成員函數(shù)
\color{red}{ Access }
operator[] reference operator[] (size_type n);
const_reference operator[] (size_type n) const;
表明可以通過(guò)數(shù)組以角標(biāo)方式訪問(wèn),即將其視作指針熬荆;如果指定的位置不存在舟山,那么該操作符會(huì)創(chuàng)建該key并返回默認(rèn)元素
at() reference at (size_type n);
const_reference at (size_type n) const;
獲取指定角標(biāo)的元素;如果找不到該key 會(huì)拋出異常累盗。
\color{red}{ Capacity }
empty() bool empty() const;

容器是否為空(沒(méi)有元素)
size() size_type size() const;

容器內(nèi)元素的數(shù)量寒矿,非負(fù)數(shù)
max_size() size_type max_size() const;

最大的元素?cái)?shù)量,固定值若债?符相?
\color{red}{ Iterators } 迭代器的函數(shù)與 vector 相同

*iterator 即可取到迭代器對(duì)應(yīng)的map的元素,其元素類(lèi)型是 std::pair<const key_type, mapped_type>蠢琳;

iterator->first 取 map 某元素的 key;
iterator->second 取 map 某元素的 value
\color{red}{ Modifiers }
swap() void swap (map& x);

交換本容器與參數(shù)容器的內(nèi)部元素
clear() 清空
erase() iterator erase (const_iterator position);
刪除指定位置

size_type erase (const key_type& k);
直接刪除 key

iterator erase (const_iterator first, const_iterator last);
刪除指定的key范圍的鍵值對(duì)
insert() pair<iterator,bool> insert (const value_type& val);
template <class P> pair<iterator,bool> insert (P&& val);

iterator insert (const_iterator position, const value_type& val);
template <class P> iterator insert (const_iterator position, P&& val);

template <class InputIterator> void insert (InputIterator first, InputIterator last);

void insert (initializer_list<value_type> il);

insert(std::map<type1, type2>(value1, value2))
insert(std::pair<type1, type2>(value1, value2))
insert(std::make_pair(value1, value2))
emplace() template <class... Args>
pair<iterator,bool> emplace (Args&&... args);
emplace_hint() template <class... Args>
iterator emplace_hint (const_iterator position, Args&&... args);
\color{red}{ Observers }
key_comp() key_compare key_comp() const;

返回用于比較容器內(nèi) key 的比較器對(duì)象啊终;
該對(duì)象決定元素在容器內(nèi)的排序;
該比較器是一個(gè)函數(shù)指針或函數(shù)對(duì)象傲须,它有兩個(gè)參數(shù)(key 類(lèi)型)蓝牲,若前者小于后者則返回true,否則返回false
value_comp() value_compare value_comp() const;

返回用于比較兩個(gè)元素(元素類(lèi)型)的比較器對(duì)象躏碳,該比較器函數(shù)的作用是決定哪個(gè)元素的 key 應(yīng)該在前面
\color{red}{ Operations}
find() iterator find (const key_type& k);
const_iterator find (const key_type& k) const;

在 map 中尋找指定的key搞旭,若找到返回迭代器;若找不到返回 map.end()
count() size_type count (const key_type& k) const;

在map中尋找指定的key的數(shù)量菇绵,由于map的key唯一肄渗,因此若存在則是1;否則返回0
lower_bound() iterator lower_bound (const key_type& k);
const_iterator lower_bound (const key_type& k) const;

如果存在該指定的key咬最,則返回該指定key的迭代器翎嫡;若不存在呢?
upper_bound() iterator upper_bound (const key_type& k);
const_iterator upper_bound (const key_type& k) const;

若存在該指定的key永乌,則返回該指定key的后一個(gè)元素的迭代器惑申;若不存在呢?
equal_range() pair<const_iterator,const_iterator> equal_range (const key_type& k) const;
pair<iterator,iterator> equal_range (const key_type& k);

返回包含指定key的邊界范圍翅雏,空間包含的形態(tài)是 [ , )圈驼。
若指定key不存在,則邊界范圍是 [當(dāng)前元素迭代器望几,下一個(gè)元素迭代器)绩脆;
若指定key不存在,則邊界范圍是 相同元素的迭代器
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末橄抹,一起剝皮案震驚了整個(gè)濱河市靴迫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌楼誓,老刑警劉巖玉锌,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異疟羹,居然都是意外死亡主守,警方通過(guò)查閱死者的電腦和手機(jī)禀倔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)丸逸,“玉大人蹋艺,你說(shuō)我怎么就攤上這事』聘眨” “怎么了捎谨?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)憔维。 經(jīng)常有香客問(wèn)我涛救,道長(zhǎng),這世上最難降的妖魔是什么业扒? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任检吆,我火速辦了婚禮,結(jié)果婚禮上程储,老公的妹妹穿的比我還像新娘蹭沛。我一直安慰自己,他們只是感情好章鲤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布摊灭。 她就那樣靜靜地躺著,像睡著了一般败徊。 火紅的嫁衣襯著肌膚如雪帚呼。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,258評(píng)論 1 300
  • 那天皱蹦,我揣著相機(jī)與錄音煤杀,去河邊找鬼。 笑死沪哺,一個(gè)胖子當(dāng)著我的面吹牛沈自,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播辜妓,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼酥泛,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了嫌拣?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤呆躲,失蹤者是張志新(化名)和其女友劉穎异逐,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體插掂,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡灰瞻,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年腥例,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片酝润。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡燎竖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出要销,到底是詐尸還是另有隱情构回,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布疏咐,位于F島的核電站纤掸,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏浑塞。R本人自食惡果不足惜借跪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望酌壕。 院中可真熱鬧掏愁,春花似錦、人聲如沸卵牍。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)辽慕。三九已至京腥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間溅蛉,已是汗流浹背公浪。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留船侧,地道東北人欠气。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像镜撩,于是被迫代替她去往敵國(guó)和親预柒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容