我很无聊的钻研了vector的实现代码,发现这个玩意非常NB,但在很多情况下没有必要减小表的大小,那么vector的速度就成问题了。。
我自己写了个Vector类,只支持加一个元素这个操作,不过速度比vector快了很多囧。。
比如说边表之类的就可以加速了。。
Code:
#include <cstring>
#include <iostream>
#include <ctime>
#include <vector>
#define rep(i,n) for(int i=0;i<n;i++)
const int inf=~0U>>1;
using namespace std;
template<class T>
struct Vector
{
typedef T* it;
it Mem,End,MemEnd;
void Grow()
{
int s=MemEnd-Mem;
it NewMem=new T[s*2];
memcpy(NewMem,Mem,sizeof(T)*s);
delete[] Mem;Mem=NewMem;
MemEnd=Mem+s*2;
End=Mem+s;
}
Vector()
{
Mem=new T[1];
MemEnd=Mem+1;
End=Mem;
}
void Add(const T&a)
{
if(End==MemEnd)Grow();
*(End++)=a;
}
it begin(){return Mem;}
it end(){return End;}
};
int main()
{
int time=clock();
Vector<int> V;
rep(i,10000000) V.Add(i);
cout<<clock()-time<<endl;time=clock();
vector<int> A;
rep(i,10000000) A.push_back(i);
cout<<clock()-time<<endl;time=clock();
}
orz,,,c++似乎对vector有优化…不过还是很慢….
开O2速度就能上去不少%