#include <vector>
#include <iostream>
#include <time.h>
using std::cout;
using std::endl;
int main()
{
const int size=100000000; //size是1一个亿
std::vector<int> *vec=new std::vector<int>;
int *p=new int[size];
time_t t1=time(NULL);
for(int i = 0; i < size;++i)
p[i]=i;
time_t t2=time(NULL);
for(int i = 0;i <size; ++i)
v.push_back(i);
time_t t3=time(NULL);
cout << difftime(t2,t1) << endl;
cout << difftime(t3,t2) << endl;
delete v;
delete []p;
return 0;
}
#include <vector>
#include <iostream>
#include <time.h>
using std::cout;
using std::endl;
int main()
{
const int size=100000000; //size是1一个亿
/*原来
std::vector<int> *vec=new std::vector<int>;
*/
std::vector<int> *vec=new std::vector<int>(size);
int *p=new int[size];
time_t t1=time(NULL);
for(int i = 0; i < size;++i)
p[i]=i;
time_t t2=time(NULL);
/*
原来
for(int i = 0;i <size; ++i)
v.push_back(i);
*/
for(int i = 0;i <size; ++i)
(*vec)[i]=i;
time_t t3=time(NULL);
cout << difftime(t2,t1) << endl;
cout << difftime(t3,t2) << endl;
delete vec;
delete[] p;
return 0;
}
原来的程序不合理,因为你使用的vector.push_back()这个函数,vector会发生多次内存变动,内存分配机制为:
当新数据插入时,但当前已经没有了空闲空间,则申明一个是原空间2倍的新的内存空间,
并把原来的数据复制到新的内存空间里面,这样比较不公平,所以你一开始就应该为vector显示的申明内存空间,
然后再来比较,这样才具有合理性。
#include <ctime>
#include<vector>
#include <iostream>
#include <algorithm>
using namespace std;
void test_vector();
void test_arrary();
void test_vector()
{
clock_t start,end;
start=clock();
vector<int>vec;
vec.reserve(10000);
srand(0);
for(size_t i=0;i!=10000;++i)
vec.push_back(i);
sort(vec.begin(),vec.end());
end=clock();
cout<<"vector所需时间:"<<static_cast<double>(end-start)/CLOCKS_PER_SEC<<endl;
}
void test_arrary()
{
clock_t start,end;
start=clock();
int *arrary=new int[10000];
srand(0);
for(int i=0;i!=10000;++i)
arrary[i]=rand();
sort(arrary,arrary+10000);
delete[]arrary;
end=clock();
cout<<"arrary所需时间:"<<static_cast<double>(end-start)/CLOCKS_PER_SEC<<endl;
}
int main()
{
test_vector();
test_arrary();
system("pause");
return 0;
}
#include <vector>
#include <algorithm>
#include <iostream>
#include <boost/chrono.hpp>
#define DATA_SIZE 10000000
void test_stl()
{
boost::chrono::system_clock::time_point start = boost::chrono::system_clock::now();
{
std::vector<int> vec;
vec.resize(DATA_SIZE);
std::srand(0);
for (std::size_t i=0;i<DATA_SIZE;i++)
vec[i]=std::rand();
}
boost::chrono::duration<double> sec = boost::chrono::system_clock::now() - start;
std::cout << "\tSTL vector耗时: " << sec.count() << " 秒\n";
}
void test_c_array()
{
boost::chrono::system_clock::time_point start = boost::chrono::system_clock::now();
{
int* arr = new int[DATA_SIZE];
std::srand(0);
for (std::size_t i=0;i<DATA_SIZE;i++)
arr[i]=std::rand();
delete []arr;
}
boost::chrono::duration<double> sec = boost::chrono::system_clock::now() - start;
std::cout << "\tC-Array耗时: " << sec.count() << " 秒\n";
}
int main()
{
for ( int i=0;i<10;i++)
{
std::cout << "第" << i+1 << " 次测试:\n";
test_c_array();
test_stl();
}
system("pause");
return 0;
}