ラクに vector を作る

そろそろ Google Code Jam です。 Google Code Jam は入力とかが vector とか多い気がするので、 vector の初期化を楽にできるようにしておくとテストとかしやすいかもしれません。昔 Boost sandbox とかでも見た気がしますが、このくらいなら自分でサックリと雑に。

#include <vector>
#include <iostream>
#include <algorithm>
#include <iterator>
#include <assert.h>

using namespace std;

template <class T> struct vector_ : public vector<T> {
    vector_() {}
    template <class U> vector_(vector<U> v) {
        copy(v.begin(), v.end(), back_inserter(*this));
    }
    template <class U> operator vector<U>() {
        vector<U> r;
        copy(this->begin(), this->end(), back_inserter(r));
        return r;
    }
};

struct any_null_vector {
    template <class T> vector_<T> operator << (T t) {
        vector_<T> r;
        r.push_back(t);
        return r;
    }
    template <class T> operator vector_<T>() {
        vector_<T> r;
        return r;
    }
};

template <class T> vector_<T> operator << (vector_<T> v, T t) {
    v.push_back(t);
    return v;
}

template <class T> ostream& operator << (ostream& os, const vector<T>& v) {
    os << '[';
    for (int i = 0; i < v.size(); i++) {
        if (i) os << ", ";
        os << v[i];
    }
    os << ']';
    return os;
}

any_null_vector vec;

int main() {
    vector<int> iv = vec << 1 << 2 << 3;
    cout << iv << endl;
    vector<string> sv = vec << "hage" << "hige";
    cout << sv << endl;
    vector<vector<string> > ssv =
        vec << (vec << "boke" << "bake") << (vec << "hage" << "hige");
    cout << ssv << endl;
}

あやしげな物体を提供して敵を潰す計画…とかではたぶん無いと思います。というかなんか今とてもやる気ない期なので、問題次第ですが、 Python で参加しようかなーと思ってます。まだみんなの Python 読み終わっとらんのが問題です。

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h