2010-7
22
你可能也对这些感兴趣
点我收起
做monte carlo很需要计算机的速度,除了寻找算法上的绝对优势之外,在代码上还能够有什么改进?结果显而易见。
预留空间+刷新整个动态数组需要67毫秒...
预留空间+刷新二维动态数组需要142毫秒...
1
构造改进版连续存储二维动态数组需要140毫秒...11
vector初始化用掉1毫秒...vector用resize来预留空间需要74毫秒...
5000000
vector如果用pushback需要2707毫秒...5000000
刷新这个vector里面的所有值需要443毫秒...使用vector的vector来pushback构造多维数组需要13131毫秒...
一个使用pair类型的vector来pushback需要12845毫秒...
#include <vector> #include <ctime> #include <iostream> #include <fstream> using namespace std; void main(){ ofstream flux("haaaaaaa.txt"); double start, finish, duration; int N; int n; N=5000000; n=2; start = clock(); double *temp= new double[N]; for(int i=0;i<N;i++){ temp[i]=99; } finish = clock(); duration = (double)(finish - start); flux<<"预留空间+刷新整个动态数组需要"<<duration<<"毫秒..."<<endl<<endl<<endl<<endl; start = clock(); double **temp1= new double *[n]; for(int i=0;i<n;i++){ temp1[i] = new double [N]; } for(int i=0;i<n;i++){ for(int j=0;j<N;j++){ temp1[i][j]=1; } } finish = clock(); duration = (double)(finish - start); flux<<"预留空间+刷新二维动态数组需要"<<duration<<"毫秒..."<<endl<<endl<<endl<<endl; flux<<temp1[1][100]<<endl; start = clock(); double **temp2=new double *[n]; temp2[0]= new double [N*n]; for(int i=1;i<n;i++){ temp2[i]=temp2[i-1]+N; } for(int i=0;i<n;i++){ for(int j=0;j<N;j++){ temp2[i][j]=11; } } finish = clock(); duration = (double)(finish - start); flux<<"构造改进版连续存储二维动态数组需要"<<duration<<"毫秒..."<<endl<<endl<<endl<<endl; flux<<temp2[1][100]<<endl; start =clock(); vector<double> test; vector<pair<double,double>> test2; vector<vector<double>> test3; finish =clock(); duration = (double)(finish - start); flux<<"vector初始化用掉"<<duration<<"毫秒..."<<endl<<endl<<endl<<endl; start = clock(); test.resize(N,1); finish = clock(); duration = (double)(finish - start); flux<<"vector用resize来预留空间需要"<<duration<<"毫秒..."<<endl<<endl<<endl<<endl; flux<<test.size()<<endl; test.clear(); start = clock(); for(int i=0;i<N;i++){ test.push_back(1); } finish = clock(); duration = (double)(finish - start); flux<<"vector如果用pushback需要"<<duration<<"毫秒..."<<endl<<endl<<endl<<endl; flux<<test.size()<<endl; //test.clear(); start = clock(); for(int i=0;i<N;i++){ test[i]=99; } finish = clock(); duration = (double)(finish - start); flux<<"刷新这个vector里面的所有值需要"<<duration<<"毫秒..."<<endl<<endl<<endl<<endl; test.clear(); start = clock(); for(int i=0;i<n;i++){ for(int j=0;j<N;j++){ test.push_back(99); } test3.push_back(test); test.clear(); } finish = clock(); duration = (double)(finish - start); flux<<"使用vector的vector来pushback构造多维数组需要"<<duration<<"毫秒..."<<endl<<endl<<endl<<endl; test.clear(); start = clock(); for(int i=0;i<N;i++){ test2.push_back(make_pair(1,1)); } finish = clock(); duration = (double)(finish - start); flux<<"一个使用pair类型的vector来pushback需要"<<duration<<"毫秒..."<<endl<<endl<<endl<<endl; delete [] temp; for(int i=0;i<n;i++){ delete [] temp1[i]; } delete [] temp1; delete [] temp2[0]; delete [] temp2; flux.close(); char wengding; cin>>wengding; };
Additional comments powered by BackType

太笨了 这文章 呵呵