STL の iterator って静的型のダックタイピングなの?
iterator ってポインタのように使えるだけかと思ったら、ポインタを iterator のように使うこともできるのか。
STL の sort とか find って、何であんな まどろっこしい引数なのかと思ったら、そういうことですか。
#include <iostream> #include <vector> #include <set> #include <algorithm> #define ARRSIZ(arr) (sizeof(arr)/sizeof(arr[0])) template <class T> void dump(T first, T last) { for (char* sep = ""; first != last; ++first, sep = " ") std::cout << sep << *first; std::cout << std::endl; } using namespace std; int main() { int a[] = { 6, 7, 2, 4, 9, 8, 3, }; vector<int> v; set<int> s; for (size_t i = 0; i < ARRSIZ(a); ++i) { v.push_back(a[i]); s.insert(a[i]); } dump(a, a + ARRSIZ(a)); dump(v.begin(), v.end()); dump(s.begin(), s.end()); cout << "sort" << endl; sort(a, a + ARRSIZ(a)); sort(v.begin(), v.end()); // sort(s.begin(), s.end()); // sort する必要ないし dump(a, a + ARRSIZ(a)); dump(v.begin(), v.end()); dump(s.begin(), s.end()); return 0; }
C 言語の配列 (a) でも、STL の vector (v) でも、set (s) でも、iterator を使って同じようにアクセスできる。
だから algorithm ヘッダが vector (など) とは別に存在するんだ。なるほどな。