0
我無法使用矢量創建矩陣。行和列將全部是隨機雙打,我試圖填充它。如何使用向量創建隨機雙精度矩陣?
我試圖初始化手的大小,我相信它初始化正確,但是,當我嘗試推入到行和列我得到非常奇怪的輸出。這裏是我的頭文件:
#ifndef MATRIX_NORM_HPP
#define MATRIX_NORM_HPP
#include <vector>
class MatrixNorm
{
public:
void initProgram();
void printResults();
double randNumber();
private:
std::vector<std::vector<double>> M;
double mNorm1 = 0.0;
double mNormInf = 0.0;
};
#endif
這裏是我的CPP文件:
#include "matrixNorm.hpp"
#include <iostream>
#include <random>
void initProgram()
{
double ranNum = 0.0;
int size = 0;
std::cout << "Please enter a size of an n by n Matrix: ";
std::cin >> size;
std::vector<std::vector<double>> temp(size, std::vector<double>(size));
for(int i = 0; i < size; ++i)
{
for(int j = 0; j < size; ++j)
{
ranNum = randNumber();
temp[i].push_back(ranNum);
temp[j].push_back(ranNum);
}
}
M = temp;
printResults();
}
void MatrixNorm::printResults()
{
for(auto &&e: M)
{
for(auto && f: e)
{
std::cout << f << " ";
}
std::cout << std::endl;
}
}
double MatrixNorm::randNumber()
{
double ranDouble = 0.0;
std::random_device rd;
std::default_random_engine generator(rd());
std::uniform_real_distribution<double> unif(-1000.0,1000.0);
ranDouble = unif(generator);
return ranDouble;
}
當我從main.cpp中運行該程序,我收到的輸出是:
Please enter a size of an n by n Matrix: 3
0 0 0 792.208 792.208 -361.248 -776.871 742.521 116.732
0 0 0 -361.248 742.521 411.965 411.965 909.313 -50.0048
0 0 0 -776.871 909.313 116.732 -50.0048 79.6189 79.6189
正如你可以看到,它似乎正確地獲得了列的大小,但它沒有正確地獲得行大小,並且看起來非常緊密。有些數字是重複的,我希望我知道如何更清楚地格式化它,但是如果從左上角開始,您會看到792.208 792.208
,然後連續下去,然後看到411.965 411.965
,最後在右下角的79.6189 79.6189
處結束。
我在做什麼錯?我如何正確地做到這一點?任何幫助,將不勝感激。
'emplace_back' vs'push_back'是什麼? – Sailanarmo
構建您的參數。也許更多的性能 – Amadeus
對我來說似乎也是正確的方式(+1),但我認爲你應該解釋爲什麼將temp的向量構建爲temp(size,std :: vector(size));'(然後使用'push_back()')是錯誤的。 –
max66