迭代器失灵,reserve的使用

迭代器失效,reserve的使用
为什么我用了reserve分配了足够的空间,结果还是不对呢。
#include <vector>
#include <iostream>
using namespace std; 
int main( )
{
     
   vector<int>v1;
   v1.reserve(20);
   
   v1.push_back( 10 );
   v1.push_back( 20 );
   v1.push_back( 30 );
   v1.push_back(40);
   v1.push_back(50);
   v1.push_back(60);
   cout << "v1 =";                                        //打印原数组
   for (vector<int>::iterator Iter = v1.begin(); Iter != v1.end(); ++Iter)
      cout << " " << *Iter;
   cout << endl;
   
   v1.insert( v1.begin()+1, v1.begin()+2, v1.begin()+5 );//插入新数据。程序1中区间为(v1.begin( )+2, v1.begin( )+4 ),唯一的不同。

   cout << "v1 =";
   for (Iter = v1.begin(); Iter != v1.end(); ++Iter )
      cout << " " << *Iter;
   cout << endl;
   return 0;
}
上面程序在vc6.0下编译的结果是:
v1=10 20 30 40 50 60
v1=10 30 40 20 20 30 40 50 60
第二个为什么不是v1=10 30 40 50 20 30 40 50 60呢
不用reserve的结果反而是v1=10 30 40 50 20 30 40 50 60
请高人指点。

Iterator

------解决方案--------------------
看下C++ Primer的相关章节,大概在第11章
------解决方案--------------------
感觉我还不知道你在说什么,我得到的结果都是v1=10 30 40 50 20 30 40 50 60
------解决方案--------------------
掌握insert的几个常用参数形式,记住STL的区间是左闭右开,其余的再错就是自己的问题了,没明白你问的是什么
------解决方案--------------------
push_back会使容器增长的
------解决方案--------------------
确实如此,我也不知道怎么回事。
------解决方案--------------------
vc6.0不标准
------解决方案--------------------
楼主害我看了半天源码,大概是这么回事,你事先分配了足够的内存,所以插入的时候计算顺序不是你想的那样,而如果不事先分配内存,需要重新申请内存这样顺序反而对了,可能像楼上说的那样,VC6.0不标准吧,
右键insert看一下源码。