当一个结构体数组大小大概为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 };

在这样的情况下,能够确定大小的还是定义一个静态数组比较好。