1.自定義迭代器原始碼如下:
public class myiterator implements iterable, iterator
/*** 返回該資料的下乙個元素
*/public t next()
throw new nosuchelementexception("only " + data.length + " elements"); }
public static void main(string args) ;
myiteratormy = new myiterator(names);
iteratorit = my.iterator();//初始化便利深度為0;
while (it.hasnext())
} public myiterator(t data)
public void remove()
/*** 初始化便利深度引數,index;
*/public iteratoriterator()
}
2.iterable,iterator介面iterable 實現這個介面允許物件成為 "foreach" 語句的目標。
iterator iterator() 返回乙個在一組 t型別的元素上進行迭代的迭代器。
iterator 對 collection 進行迭代的迭代器。
boolean hasnext() 如果仍有元素可以迭代,則返回 true。
enext()返回迭代的下乙個元素。
void remove() 從迭代器指向的 collection 中移除迭代器返回的最後乙個元素(可選操作)。
3.集合架構:
4.collection為什麼一定要實現iterable介面,為什麼不直接實現iterator介面?
iterator介面的核心方法next()或者hasnext() 是依賴於迭代器的當前迭代位置的;如果collection直接實現iterator介面,則需引入乙個全域性的變數,如上述**中的index,用於標記迭代器當前的迭代位置;在多個迭代器迭代同一集合時,index會相互影響。
5.collection實體類是如何呼叫next()或者hasnext()方法的?
以arraylist為例進行研究如下:我們可以發現,在實現iterable介面的iterator()方法時,通過例項乙個實現iterator介面的內部類的方式來實現,從而保證多個迭代器迭代統一集合時,其迭代器位置引數cursor互不影響。
public iteratoriterator()
/**
* an optimized version of abstractlist.itr
*/private class itr implements iterator
@suppresswarnings("unchecked")
public e next()
public void remove() catch (indexoutofbound***ception ex)
}final void checkforcomodification()
}
C 自定義迭代器
讓我們在示例中看乙個簡單迭代器型別的定義。我們定義乙個類模板,用來表示一段數值型別值,也可以生成指定範圍的開始和結束迭代器。這個迭代器也是模板型別,兩個模板都定義在同乙個標頭檔案 numeric range.h 中。下面是 numeric range模板的定義 template class nume...
c 自定義迭代器練習
include include include include includeusing namespace std 第乙個型別引數可選的值為如下幾種 struct input iterator tag 唯讀 struct mutable iterator tag 只寫 struct output ...
C 自定義迭代器(STL)
一.iterator traits 迭代器萃取機 include template struct iterator traits 假如我們定義了乙個迭代器myiterator template void my swap iter a,iter b 當函式 以乙個迭代器為引數時,會出現這樣乙個尷尬,t...