57072


繰り返し処理の各処理におけるパフォーマンスをプログラムを書いています。  
繰り返し処理は、行列の足し算で各要素を足す処理を指しています。  
配列に入れた後、昇順にソートします。

[前回までの質問](https://ja.stackoverflow.com/questions/57069/c%E3%81%A7%E9%85%8D%E5%88%97%E3%81%AE%E8%A6%81%E7%B4%A0%E3%82%92%E3%82%BD%E3%83%BC%E3%83%88%E3%81%99%E3%82%8B%E6%99%82%E3%81%AE%E3%82%A8%E3%83%A9%E3%83%BC/57070#57070)に続いて、こちらの質問をします。

**解決したいこと**  
①出力の配列がソートされていないですが、コンパイルエラーもなく、昇順にソートするにはコードをどのように修正すればいいのでしょうか。

②今回は足し算の各回数にかかる時間を計算しているので、2x2行列の場合

[code]

    C[0][0]
    C[0][1]
    C[1][0]
    C[1][1]
    
[/code]

への足し算の結果を挿入で4回分の時間で、4要素が出力されると考えていましたが、24要素出力される理由がわかりません。

**出力**

[code]

    $ ./simple
    82, 85, 85, 155, 6.92884e-310, 6.92884e-310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.24399e-314, 4.24399e-314, 4.24399e-314, 0, 0, 0, 2.122e-314, 0, 0,
    
[/code]

**該当コード**

[code]

    #include <chrono>
    #include <iostream>
    #include <thread>
    #include <vector>
    #include <algorithm>
    #include <iostream>
    
    //繰り返し処理全体にかかった時間
    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++){
                    //測定開始
                    std::chrono::high_resolution_clock::time_point start = std::chrono::high_resolution_clock::now();
                    C[i][j] += A[i][j]+B[i][j];
                    //測定終了
                    high_resolution_clock::time_point end = high_resolution_clock::now();
                    double time =  std::chrono::duration_cast<std::chrono::nanoseconds>(end - start).count();
    
                    //配列にappend
                    timedata.push_back(time);
                }
        }
    
        std::vector<double> timedataResult;
    
        //配列をソート
        //timedataResult = 
        std::sort(timedata.begin(), timedata.end());
        for (int iIndex = 0; iIndex < sizeof(timedata); iIndex++) {
            std::cout << timedata[iIndex] << ", ";  // 結果をプリントしてみる。
        }
    
    
    }
    
[/code]


CC BY-SA 4.0
2019-07-31T10:54:44.380
57071
2019-07-31T13:36:27.220
2019-07-31T13:36:27.220
question
c++
C++で生成した配列要素のがソートできず、中身の要素数が不自然な問題について


`sizeof` は `vector` の要素数を意味しないので、こういう使い方はダメです。

昔の [c++98](/questions/tagged/c%2b%2b98 "'c++98' のタグが付いた質問を表示")
とかだといろいろ書かなきゃいけなかったんですが、今どきの [c++11](/questions/tagged/c%2b%2b11 "'c++11'
のタグが付いた質問を表示") なら range-based for というのを使うと楽で

[code]

    for (auto value : timedata) std::cout << value << ", ";
    std::cout << std::endl;
    
[/code]


CC BY-SA 4.0
2019-07-31T11:14:32.810
57072
2019-07-31T11:14:32.810
8589
57071
answer