STL 主要是由 containers(容器),iterators(迭代器)和 algorithms(演算法)的 templates(模板)構成的,但是也有幾個 utility templates(實用模板)。其中一個被稱為 advance。advance 將一個指定的 iterator(迭代器)移動一個指定的距離:
template<typename IterT, typename DistT> // move iter d units
void advance(IterT& iter, DistT d); // forward; if d < 0,
// move iter backward
在概念上,advance 僅僅是在做 iter += d,但是 advance 不能這樣實現,因為只有 random access iterators(隨機訪問迭代器)支援 += operation。不夠強力的 iterator(迭代器)類型不得不通過反覆利用 ++ 或 -- d 次來實現 advance。
你不記得 STL iterator categories(迭代器種類)了嗎?沒問題,我們這就做一個簡單回顧。對應於它們所支援的操作,共有五種 iterators(迭代器)。input iterators(輸入迭代器)只能向前移動,每次只能移動一步,只能讀它們指向的東西,而且只能讀一次。它們以一個輸入檔案中的 read pointer(讀指標)為原型;C++ 庫中的 istream_iterators 就是這一種類的典型代表。output iterators(輸出迭代器)與此類似,只不過用於輸出:它們只能向前移動,每次只能移動一步,只能寫它們指向的東西,而且只能寫一次。它們以一個輸出檔案中的 write pointer(寫指標)為原型;ostream_iterators 是這一種類的典型代表。這是兩個最不強力的 iterator categories(迭代器種類)。因為 input(輸入)和 output iterators(輸出迭代器)只能向前移動而且只能讀或者寫它們指向的地方最多一次,它們只適合 one-pass 運算。
一個更強力一些的 iterator category(迭代器種類)是 forward iterators(前向迭代器)。這種 iterators(迭代器)能做 input(輸入)和 output iterators(輸出迭代器)可以做到的每一件事情,再加上它們可以讀或者寫它們指向的東西一次以上。這就使得它們可用於 multi-pass 運算。STL 沒有提供 singly linked list(單向鏈表),但某些庫提供了(通常被稱為 slist),而這種 containers(容器)的 iterators(迭代器)就是 forward iterators(前向迭代器)。TR1 的 hashed containers(雜湊容器)的 iterators(迭代器)也可以屬於 forward category(前向迭代器)。