28 迭代器介面卡

2021-08-13 15:57:05 字數 2805 閱讀 6944

本篇主要介紹介面卡中的第三種,它屬於迭代器的介面卡,換句話說就是對迭代器進行改造。下面用兩個例子reverse_iterator和inserter進行舉例。

reverse_iterator是用來改造迭代器,使迭代器進行反向操作。如序列式容器中的begin()和end()就是用迭代器介面卡reverse_iterator實現。

1)reverse_iterator的結構

解析:

a、reverse_iterator類設計的資料就是迭代器current;

b、該類中與迭代器設計原則類似,也要遵循迭代器的5種設計原則;

c、該介面卡與迭代器一樣可以實現++、--操作,但是與正常迭代器是反向的,即++實現是--current。

2)介面卡的使用

解析:

a、如在vector容器中的成員函式rbegin()和rend()的實現方式就是要使用reverse_iterator迭代器,對begin()和end()進行適配;

b、我們知道begin()和end()的返回容器首部迭代器和尾部迭代器,而rbegin()正好與end()相同,也是返回尾部迭代器,只是rbegin()指向的是尾部的前乙個,通過operator*()實現。

c、從reverse_iterator的結構中可以知道,begin()中的++對容器來說是正向的,而rbegin()++是反向的。

inserter介面卡是改造迭代器,使迭代器能使用insert()方法。

1)使用insert_iterator介面卡①使用原來的迭代器

解析:

a、宣告乙個陣列myints和乙個vector的容器,裡面包含7個空間;

b、使用演算法copy()將陣列元素拷貝到目標vector容器中,其中copy()演算法如下:

解析:

a、copy()是模板函式,第乙個引數是原物件的第乙個元素的迭代器,第二個引數是原物件的最後乙個迭代器,第三個引數是目標拷貝位置的初始迭代器;

b、通過while迴圈,將原物件乙個個拷貝至目標物件中;

②使用inserter_iterator迭代器

解析:

a、宣告鍊錶foo,bar,實現將bar中的元素拷貝至foo中第三個元素後,如果使用原來的copy()方法,會將bar中的元素直接乙個個放在foo第三個元素後,而本身第三個元素後的元素4,5就會被覆蓋;

b、這邊使用inserter()函式,inserter()函式其實是使用了insert_itetator。

解析:

a、inserter函式模板中有兩個引數,第乙個是容器物件,第二個是容器的迭代器。

2)insert_itetator的結構

解析:

a、同迭代器一樣,介面卡insert_iterator中資料型別包括容器物件和迭代器;

b、當copy()演算法呼叫*result = *first時,會呼叫拷貝賦值函式operator=,而該函式正是使用了insert()函式來實現物件的插入,這樣就不會打破原來foo的結構。

書摘 迭代器介面卡

迭代器介面卡是產生迭代器的函式。最常見的是那些產生迭代器insert iterators的介面卡,這樣的迭代器會讓關聯的容器動態地增長。這樣的迭代器能被安全地用做乙個複製演算法的目的地。它們是在標頭檔案中定義的 back inserter c 對容器c產生乙個迭代器,這個迭代器會給c新增元素。這個容...

介面卡模式 預設介面卡,類介面卡,物件介面卡

模式思想 改變乙個類的對外介面 增加或減少 以滿足不同外部呼叫者的需求 角色成員 目標介面 target 客戶所期待的介面。目標可以是具體的或抽象的類,也可以是介面。需要適配的類 adaptee 需要適配的類或適配者類。介面卡 adapter 通過包裝乙個需要適配的物件,把原介面轉換成目標介面。適配...

介面卡模式(類介面卡 物件介面卡)

做個筆記 引用 public inte ce usb public inte ce psp public class usber implements usb 類介面卡 psp適用usb介面 public class usbadapter extends usber implements psp 物...