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) でも、STLvector (v) でも、set (s) でも、iterator を使って同じようにアクセスできる。

だから algorithm ヘッダが vector (など) とは別に存在するんだ。なるほどな。