C++で生成した配列要素のがソートできず、中身の要素数が不自然な問題について
繰り返し処理の各処理におけるパフォーマンスをプログラムを書いています。
繰り返し処理は、行列の足し算で各要素を足す処理を指しています。
配列に入れた後、昇順にソートします。
前回までの質問に続いて、こちらの質問をします。
解決したいこと
①出力の配列がソートされていないですが、コンパイルエラーもなく、昇順にソートするにはコードをどのように修正すればいいのでしょうか。
②今回は足し算の各回数にかかる時間を計算しているので、2x2行列の場合
C[0][0]
C[0][1]
C[1][0]
C[1][1]
への足し算の結果を挿入で4回分の時間で、4要素が出力されると考えていましたが、24要素出力される理由がわかりません。
出力
$ ./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,
該当コード
#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] << ", "; // 結果をプリントしてみる。
}
}