關於C 11 iterator失效規則的疑問?

時間 2021-09-08 17:44:08

1樓:linux40

unordered_*還沒寫,寫了個deque,說一下。

首先deque的wikipedia上提到了三種實現方法Double-ended queue

第一種是 circular buffer。

第二種類似vector的實現,只不過可以兩端增長而不是只有一端。

第三種就是有乙個可以兩端增長的指標的佇列(遞迴的定義),佇列中的指標指向一塊資料。

現在來看失效問題。

insert導致所有迭代器和引用失效,但是在首尾插入時,引用不會失效。

「但是」後面,前兩種實現做不到,因為會由於原先申請的空間不夠而需要重新構造,這樣引用會全部失效。

最後一種在兩端插入時不會是因為在兩端插入時,中間的資料不需要移動,如果佇列裡最前面或最後面的指標指向的塊沒滿的話,直接裝進去就行,滿了的話另外申請塊,並將新塊的指標加入指標佇列就行。這樣引用指向的地方和原來是一樣的,沒有失效。

迭代器依舊會失效的原因是,指標佇列可能會增長,空間不夠就只能像前兩種那樣重新申請。不過這樣只會影響迭代器,迭代器移動到塊的邊緣時,需要知道它前後的指標的值,所以,迭代器需要指標佇列的資訊,指標佇列重新申請,迭代器就會失效了。

unordered_*我還沒寫,不過這種標準的話,就不是用的開放定址法,而是鏈結或完全雜湊法了。。。

關於c的問題?

CodeAllen 格式字元 i 輸出乙個整型數 d 輸出乙個整型數 ld 輸出long整數 f 輸出乙個浮點數 雙精度也是這個輸出 e 輸出乙個浮點數,科學計數法,指數形式的浮點數 g 輸出乙個浮點數,當指數小於 4或者大於5,則運用科學計數法,否則正常顯示浮點數 c 輸出乙個字元 s 對應是ch...

c 11中std unique ptr需要明確知道型別的析構函式,而shared ptr不需要?

土地測量員 詳細講一下std unique ptr的部分吧。std unique ptr需要明確知道型別的析構函式 unique ptr型別是 template class T,class Deleter std default delete class unique ptr private T p...

維生素c美白11?

李四 斷斷續續吃了兩盒,沒覺著變白,反而對牙齦上火 口腔潰瘍挺管用,每每家裡有人口腔潰瘍都會來找我淘一粒,還有對改善過敏個人覺著也有一定的作用! 陸陸陸柯潔 維C美白是共識,這裡不多說了。維C是水溶性維生素,對於出汗多,排洩多的人是有必要補充的維C可以增強免疫力,對於容易感冒的人群可以服用維C可以合...