#include <iostream>
#include <vector>

const int size = 50000000;

std::vector<int> test1()
{
    return std::vector<int>(size);
}

void test2(std::vector<int>& v)
{
    v.assign(size, 0);
}

int main()
{
    std::vector<int> v(size);
    clock_t c1, c2, c3, c4, c5, c6;

    // コピー
    c1 = clock();
    v = static_cast<const std::vector<int>&>(test1());
    c2 = clock();

    // ムーブ
    c3 = clock();
    v = test1();
    c4 = clock();

    // バッファの再利用
    c5 = clock();
    test2(v);
    c6 = clock();

    printf("コピー : %d\n", static_cast<int>(c2 - c1));
    printf("ムーブ : %d\n", static_cast<int>(c4 - c3));
    printf("再利用 : %d\n", static_cast<int>(c6 - c5));
}
