繰り返し処理の各処理におけるパフォーマンスの中央値を求めるプログラムを書いています。
繰り返し処理は、行列の足し算で各要素を足す処理を指しています。
以下のコードを組み合わせて、現在のプログラムを書きました。
繰り返し処理(行列の足し算)の参考コード
中央値を求める参考コード

解決したいこと
現在のプログラムをコンパイルするとエラーが表示されるのですが、エラー文を読んでもどのように修正すれば中央値を求めることができるのかわからず困っています。

実行結果

$ g++ -o simple simple.cpp
simple.cpp:29:24: error: implicit instantiation of undefined template
      'std::__1::vector<double, std::__1::allocator<double> >'
    std::vector<double>timedata;
                       ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/iosfwd:200:28: note: 
      template is declared here
class _LIBCPP_TEMPLATE_VIS vector;
                           ^
1 error generated.

実行プログラム

#include <chrono>
#include <iostream>
#include <thread>

//繰り返し処理全体にかかった時間
using namespace std::chrono;

int main()
{
    #define N 2

    double A[N][N] = {
        {3.0, 5.0},
        {9.0, 5.0}
    };

    double B[N][N] = {
        {3.0, 6.0},
        {8.0, 9.0}
    };

    double C[N][N] = {
        {0.0, 0.0},
        {0.0, 0.0}
    };
    int i, j, k, n;

    //各足し算にかかった時間を行列に入れていく
    std::vector<double>timedata;

    for(i=0; i<N; i++)
        for(j=0; j<N; j++)
                C[i][j] += A[i][j]+B[i][j];
                timedata.push_back(time);

    //繰り返し処理全体にかかった時間の計測終了
    high_resolution_clock::time_point end = high_resolution_clock::now();

    //行列をソート
    timedata = sort(timedata);

    n = sizeof(timedata);

    //中央値を求める
    double med;
    if ((n % 2) == 0) {
      med = (timedata[(n / 2) - 1] + timedata[n / 2]) / 2.0;
    }
    else {
      med = timedata[n / 2];
    }

    return med;

}