當一個結構體數組大小大概為5000的樣子就超出內存,vector底層實現機制是基于deque的,下面是簡短的一個關于vector的簡短描述。

1.vector
vector就是動態數組.它也是在堆中分配內存,元素連續存放,有保留內存,如果減少大小后,內存也不會釋放.如果新值>當前大小時才會再分配內存.
它擁有一段連續的內存空間,并且起始地址不變,因此它能非常好的支持隨即存取,即[]操作符,但由于它的內存空間是連續的,所以在中間進行插入和刪除會造成內存塊的拷貝,另外,當該數組后的內存空間不夠時,需要重新申請一塊足夠大的內存并進行內存的拷貝。這些都大大影響了vector的效率。

對最后元素操作最快(在后面添加刪除最快 ), 此時一般不需要移動內存,只有保留內存不夠時才需要

對中間和開始處進行添加刪除元素操作需要移動內存,如果你的元素是結構或是類,那么移動的同時還會進行構造和析構操作,所以性能不高 (最好將結構或類的指針放入vector中,而不是結構或類本身,這樣可以避免移動時的構造與析構)。
訪問方面,對任何元素的訪問都是O(1),也就是是常數的,所以vector常用來保存需要經常進行隨機訪問的內容,并且不需要經常對中間元素進行添加刪除操作.
相比較可以看到vector的屬性與string差不多,同樣可以使用capacity看當前保留的內存,使用swap來減少它使用的內存.
capacity()返回vector所能容納的元素數量(在不重新分配內存的情況下) 測試push_back 1000個數據 capacity返回16384

總結
需要經常隨機訪問請用vector


參考文章:http://blog.csdn.net/lmh12506/article/details/8445025
在這個程序里,我用了結構體,所以每次申請內存時會調用構造函數,造成效率不高。

1 struct milk{
2   int percost;
3   int facmount;
4   bool operator <(const milk &m1) const{
5       return percost<m1.percost;
6   }
7 };

在這樣的情況下,能夠確定大小的還是定義一個靜態數組比較好。