数组和STL的效率问题

#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;
}

  

 

posted @ 2013-02-07 10:33  byfei  阅读(248)  评论(0)    收藏  举报