C Primer 筆記 順序容器

2021-06-19 23:09:03 字數 3027 閱讀 1206

將單一元素型別聚集起來成為容器,然後根據位置來儲存和訪問這些元素

vectorivec;

listslist;

dequedstr;

vector   支援快速隨機訪問

list        支援快速插入/刪除

deque 雙端佇列

stack 

後進先出(lifo)棧

queue 

先進先出(fifo)佇列

priority_queue

有優先順序管理的佇列

c c 建立乙個名為c的容器。 c是容器型別名, 如 vector, t是元素型別, 如 int 、string。 適用於所有的容器。

c c(c2)

建立容器c2的副本c。 c2和c必須具有相同的容器型別,並且所儲存的元素型別相同。適用於所有容器。

c c(b,e)

建立容器c, 其元素型別是迭代器b 和 e 標示的範圍內的所有元素。適用於所有容器。

c c(n,t)

用n個值為 t 的元素建立容器c,其中值 t 必須為容器型別c的元素型別的值,或是可以轉化為該型別的值。只適用於順序容器。

c c(n)

建立有 n 個值初始化元素的容器c。只適用於順序容器。

1、 元素型別必須支援賦值運算

2、元素型別的物件必須可以複製

1、引用不支援一般意義的賦值運算,因此不能用作容器的元素型別

2、io庫型別不支援賦值和複製,因此不能用作容器的元素型別

容器的容器: 必須用空格隔開相鄰的   > 符號  

//example:

vector< vector> svec;

*iter

返回迭代器 iter 所指向的元素的引用

iter->men 

對迭代器 iter 進行解引用,獲取指定元素中名為mem的成員。

++iter

iter++

給迭代器+1,使其指向容器內的後乙個元素

--iter

iter-- 

給迭代器-1 ,使其指向容器內的前乙個元素

iter1 == iter2 

iter1 != iter2 比較兩個迭代器是否指向同乙個容器中的同乙個元素或者同乙個容器中末端的下乙個位置 

1、迭代器的算術運算

2、迭代器的關係操作符

iter + n 

iter - n

iter1 += iter2

iter1 - =iter2

iter1 - iter2

>,>=, <, <=

c++語言使用一對迭代器來標記 迭代器範圍 。這兩個迭代器必須指向同乙個容器中的元素或者容器末端的下乙個位置。

c++的迭代器範圍是 左閉合區間 。 [ first, last )

size_type

iterator

const_iterator

reverse_iterator 

逆序迭代器

const_reverse_iterator

difference_type

足夠儲存兩個迭代器差值的有符號整型,可為負數

value_type

元素型別

reference

元素的左值型別,是 value_type& 的同義詞

const_reference

c.begin()

c.end()

c.rbegin()

返回乙個逆序的迭代器,它指向容器 c 的最後乙個元素

c.rend()

返回乙個逆序迭代器,它指向容器c 的第乙個元素的前面位置 

c.push_back(t)

c.push_front(t)

在容器c的前端新增乙個元素,返回 void 。只適用於 list 和 deque 

c.insert(p, t) 

在迭代器 p 的前面插入元素 t ,返回新插入元素的迭代器

c.insert(p,  n,  t)

在迭代器 p 的前面插入n 個值為 t 的元素,返回值為 void

c.insert(p,  b, e)

在迭代器 p 的前面插入 由迭代器 b 和 e 所標記的元素,返回值為 void

note: 不要儲存 end 操作返回的迭代器。 

1、所有容器都支援用關係操作符來比較兩個容器。

2、兩個容器的型別以及容器內元素的型別必須相同。

3、容器的比較是基於容器內元素的比較。

c.size()

c.max_size()

c.empty()

c.resize(n)

c.resize(n, t)

c.back()

c.front()

c[n]

只適用於vector、deque

c.at(n)

只適用於vector、deque

c.erase(p)

c.erase(b, e)

c.clear() 

c.pop_back()

c.pop_front()

只適用於 list、deque

c1 = c2 

刪除容器 c1 的所有元素,將 c2 的元素複製給 c1 。兩個容器的容器型別和元素型別必須一致

c1.swap(c2)

作用:交換內容。兩個容器型別必須完全相同

c.assign(b, e) 

重新設定容器 c 的元素。首先將容器 c 的元素全部刪除,用 迭代器 b 和 e 所標記的範圍內的元素給 容器 c 賦值,迭代器 b 和 e 必須不是

指向容器 c中元素 的迭代器

c.assign(n, t)

將容器 c 重新設定為容納 n 個元素  初值為 t 的容器 

reverse : reverse操作告訴容器應該預留多少個元素的儲存空間

1、除非找到選擇其他容器的合適理由,否則選用 vector 容器是最好的選擇

2、 如果無法確定選用那種容器,則應該使用vector 和 list 都支援的操作:使用迭代器,而不是使用下標操作,並且避免隨機訪問。

《C primer》 順序容器

順序容器 vector 支援快速隨機訪問 list 支援快速插入 刪除 deque 雙端佇列 順序容器介面卡 stack 後進先出 lifo 棧 queue 先進先出 fifo 棧 priority queue 有優先順序管理的佇列 容器元素型別必須滿足條件 1.支援賦值運算,2.物件可以賦值 因為...

C primer 順序容器

順序容器 vector deque list 介面卡 根據原始容器型別所提供的操作,通過定義新的操作介面,適應基礎的容器型別。容器元素初始化 cc 預設建構函式 cc n n個值初始化,只適用於順序容器,必須給出缺省建構函式 cc n,t n個t只適用於順序容器,可以不給,但要給出 t t 建構函式...

C Primer筆記 9 順序容器 2

vector容器的自增長 vector容器的元素以連續的方式存放,即每乙個元素都緊挨著前乙個元素儲存。分配記憶體時實際分配的容量比當前需要的空間多一些,預留的儲存區用於存放新新增的元素,不必為每個新元素重新分配容器。list容器增加新元素時標準庫只需建立乙個新元素,然後將新元素連線在已存在的鍊錶中,...