迭代器是對指標進行進一步抽象的產物。
迭代器是遍歷所有容器(序列)/流的統一介面,是標準庫泛形演算法的基礎。
迭代器根據其能力分為五種:
category
properties
valid expressions
all categories
copy-constructible
, copy-assignable and destructible
x b(a);
b = a;
can be incremented
++a
a++
random access
bidirectional
forward
input
supports equality/inequality comparisons
a == b
a != b
can be dereferenced as an rvalue
*aa->m
output
can be dereferenced as an lvalue
(only for mutable iterator types)
*a = t
*a++ = t
default-constructible
x a;
x()multi-pass: neither dereferencing nor incrementing affects dereferenceability
multi-pass是指,迭代器不管進行多少次自增及解引用,都不會使得其指過的物件無法訪問。
can be decremented
--aa--
*a--
supports arithmetic operators + and -
a + n
n + a
a - n
a - b
supports inequality comparisons (<, >, <= and >=) between iterators
a < b
a > b
a <= b
a >= b
supports compound assignment operations += and -=
a += n
a -= n
supports offset dereference operator ()
a[n]
it跳轉到與原始指向相隔n的另乙個元素。it為雙向迭代器、隨機訪問的情況下n可以為負數,否則n只能為正數。表示的概念為it+=n
計算 first 與 last 之間的迭代器個數
表示的概念為 it - n
表示的概念為 it + n
生成輸出迭代器,*it = x 呼叫container.push_back(x)實現
生成輸出迭代器,*it = x 呼叫container.push_front(x) 實現
生成輸出迭代器,*it = x 呼叫container.insert(it,x)實現
生成輸入迭代器,將迭代器包裝成move_iterator。*it = std::move(*it)
將未初始化的記憶體包裝成輸出迭代器,使其可以像已經初始化的記憶體一樣呼叫 *it=x
iterator_traits::value_type
iterator_traits::reference
iterator_traits::pointer
iterator_traits::difference_type
iterator_traits::iterator_category
C 標準庫 迭代器
迭代器是乙個 可遍歷stl容器內全部或部分元素 的物件。乙個迭代器用來指出容器中的乙個特定位置。operator 返回當前位置上的元素值 operator 和operator 判斷兩個迭代器是否指向同意位置 operator 為迭代器賦值。因為每個容器選擇的資料結構不同,所以每一種容器都必須提供自己...
C 標準庫 Reverse(逆向)迭代器
reverse 逆向 迭代器 reverse迭代器是一種配接器,重新定義遞增遞減運算,使其行為正好倒置,這樣使迭代器以逆向來處理元素。rbegin 傳回逆向遍歷的第乙個元素,也就是實際上最後乙個元素的位置 rend 傳回逆向遍歷時最後乙個元素的下乙個位置,也就是實際上第乙個元素的前乙個位置 示例 i...
C 標準庫vector以及迭代器
今天看c 的書,出現了乙個新的概念,容器vector以及容器迭代器。vector是同一種物件的集合,每個物件都有乙個對應的整數索引值。和string物件一樣,標準庫將負責管理與儲存元素相關的類存。引入標頭檔案 include 1 vectorv1 vector儲存型別為t的物件。預設建構函式,v1為...