正確的做法是像stl容器那樣,建立乙個迭代器類,然後裡面過載!=(比較), ++(遞增),*(解引用)這幾個函式。
例如:
template
<
class
t>
class
iterator
bool
operator!=(
const iterator& that)
iterator&
operator++(
) t&operator*(
)iterator
(const iterator&)=
delete
; iterator&
operator=(
const iterator&)=
delete;~
iterator()
=default
;}
光是這樣還不夠,還得在我麼要遍歷的類中新增begin和end兩個函式,begin和end返回什麼呢?我給大家舉個例子,乙個陣列char a[5],begin代表了第乙個元素,即a[0], end代表最後乙個元素的後一位,即a[5],我們只需要把begin和end函式內返回我們提前指定好這兩個元素的迭代器就行了,例:
classa
iterator
&end()
}
之後我們就可以使用for (auto& i : ***)遍歷這個型別的變數了,最後和大家說一下,如果begin和end是返回指標的話可以不用迭代器類就可以,因為指標的 !=(比較), ++(自增),*(解引用)這幾個函式都是c++語言內建的。前提是你遍歷的資料是連續記憶體,這樣通過++(自增)獲取的下個值才是正確的,不然你還是得額外寫乙個迭代器類。 C 自定義List類
如下 using system using system.collections.generic using system.linq using system.text namespace myarraylist public myarraylist int capacity 索引器 public ...
C 自定義類排序
1 宣告乙個類 人物類 public class person 2 宣告乙個繼承了介面icomparer的類 比較人物類例項大小,實現介面icomparer public class personcomparer icomparer return 0 3 main函式,建立乙個list,並使用剛建立...
c 自定義string類
1.標頭檔案部分 define crt secure no warnings pragma once include includeusing namespace std class mystring 2.函式定義部分 include mystring.h mystring mystring mys...