之前在做acm的一道兩路合併排序時一直執行超時,原因就在於我習慣使用vector來儲存資料。而vector和動態陣列在效率上是存在區別的,所以在這裡就討論一下兩者的效率。
從網上資料看在vs中debug和release模式下vector的執行時間存在差別,而對於陣列 而言沒有變化,且總的來說陣列效率高於vector。對於stl而言不同的編譯器效果不同,下面都是用vs2010進行測試。
debug模式下的測試結果是:
基本上vector的執行時間是動態陣列的50倍左右。
release模式下的測試結果是:
vector的執行時間是動態陣列的兩倍左右。且相比debug模式下執行時間均有顯著提高。
結論:至少在vs2010中vector的執行效率是低於動態陣列的。因此在對效率要求較高的情況下建議使用動態陣列。
附測試**:
#include#include#include using namespace std;
int main()
{ vectorvtest;
int *test;
int n,tmp;
long start,end;
while(cin>>n)
{test=new int[n];
start=clock();
for(int i=0;i
vs2010新特性 下
il 0001 ldc.i4.s 10 il 0003 stloc.0 il 0004 ldc.r8 1.2 il 000d stloc.1 il 000e ldc.r4 1.1 il 0013 stloc.2 il 0014 ldc.i4.2 il 0015 newarr mscorlib sys...
vs2010新特性 下
il 0001 ldc.i4.s 10 il 0003 stloc.0 il 0004 ldc.r8 1.2 il 000d stloc.1 il 000e ldc.r4 1.1 il 0013 stloc.2 il 0014 ldc.i4.2 il 0015 newarr mscorlib sys...
vs2010新特性 下
il 0001 ldc.i4.s 10 il 0003 stloc.0 il 0004 ldc.r8 1.2 il 000d stloc.1 il 000e ldc.r4 1.1 il 0013 stloc.2 il 0014 ldc.i4.2 il 0015 newarr mscorlib sys...