最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

7 迭代器(下)

2023-03-07 01:53 作者:HC_0702  | 我要投稿

本項(xiàng)目GitHub: HuangCheng72/HCSTL: 我的STL實(shí)現(xiàn) (github.com): https://github.com/HuangCheng72/HCSTL

進(jìn)入正文。

在上一篇中,我們提到:

我們希望迭代器最好能像指針一樣,可以通過*來讀寫數(shù)據(jù),可以++,--,或者p += 3 ,p -= 4 之類的操作來移動,還可以通過兩個迭代器相減計(jì)算兩個迭代器之間的距離(最好同樣用指針相減的結(jié)果ptrdiff_t類型表示,當(dāng)然你非得用其他也行)等等。

這就需要運(yùn)用C++的重載機(jī)制,在迭代器中重載這些運(yùn)算符。

我們嘗試用結(jié)構(gòu)體封裝 list 的結(jié)點(diǎn),制作一個符合標(biāo)準(zhǔn)的迭代器。

list 的結(jié)點(diǎn)原型如下:

list 是雙向鏈表,所以迭代器應(yīng)該是雙向迭代器,因此 Category 應(yīng)為 bidirectional_iterator_tag 。

因此設(shè)計(jì)原型和具體實(shí)現(xiàn)有:

封裝之后嵌入到 list 具體實(shí)現(xiàn)中,在 list 的內(nèi)部實(shí)現(xiàn)中,凡是返回結(jié)點(diǎn)的,一律改為返回迭代器,如果不對外暴露,則保持以結(jié)點(diǎn)指針為基礎(chǔ)實(shí)現(xiàn)。(原則,對外部暴露迭代器,對內(nèi)部可以依然采用指針實(shí)現(xiàn))。

整理代碼如下:

main.cpp,簡單測試一下,能否使用迭代器取值。

順利運(yùn)行并輸出正確結(jié)果。

對于vector則不太一樣,因?yàn)関ector的迭代器就是其原生指針(沒有比原生指針更好用的迭代器了),所以直接指定原生指針為迭代器即可。

vector.h

我們建立一個新的 algorithm.h 頭文件,在其中實(shí)現(xiàn) for_each 算法:

在main.cpp中測試

可以看到均正常輸出,且輸出相同。

歡迎訪問本項(xiàng)目的GitHub倉庫,如果對您有幫助,麻煩給項(xiàng)目一個star,謝謝!

HuangCheng72/HCSTL: 我的STL實(shí)現(xiàn) (github.com): https://github.com/HuangCheng72/HCSTL

7 迭代器(下)的評論 (共 條)

分享到微博請遵守國家法律
新巴尔虎右旗| 贵溪市| 电白县| 荣昌县| 苏尼特左旗| 宽甸| 福泉市| 桃江县| 南阳市| 香港 | 新巴尔虎左旗| 开远市| 高青县| 深圳市| 句容市| 哈尔滨市| 沙坪坝区| 黄龙县| 天峻县| 昌都县| 北辰区| 翼城县| 泽普县| 五大连池市| 石棉县| 工布江达县| 大埔区| 社会| 台湾省| 尼玛县| 绥江县| 桐梓县| 若尔盖县| 伊吾县| 姚安县| 金湖县| 沙河市| 太原市| 涞水县| 普安县| 麻江县|