关于vector.clear()函数的1点不解

关于vector.clear()函数的一点不解

vector<JOB> jev(Jwait);
Jwait.clear();
vector<JOB>::iterator ip;
for(vector<JOB>::size_type id = 0;id < jev.size();++id)
{
ip = Jwait.begin();
while(ip != Jwait.end())
{
if(jev[id].run <= ip->run )
break;
else
++ip;
}
Jwait.insert(ip,jev[id]);

以上是我的代码,在使用clear函数后,在for循环中ip指向Jwait.begin(),为什么此时ip的值是Jwait原来删除前的值,难道clear函数没有清空容器中的内容?但是我调试的时候看到Jwait的内容的确清空了,但为什么ip的值却是删除前的值,求大牛指教!
------解决方案--------------------
楼主。迭代器IP的值,并不是元素的值,而是元素所在地址的值。容器虽然Clear了,但其所在的内存地址是没变的。因此,就像你说的,ip的值却是删除前的值。
------解决方案--------------------
vector的内存不会自动释放的,clear后仍然占用那块内存
找一本合格的关于C++标准库的书,会有很详细的介绍

C++11提供了shrink_to_fit方法显式释放内存,如果你一定要释放内存,在clear或者erase后进行shrink操作
C++98/03中也有一些小技巧可用(大致是通过与一个临时定义的空vector进行swap操作)