!关于容器的有关问题

求助!关于容器的问题
关于容器这方面,我有两个问题一直困惑我,请大虾们帮帮忙吧。。。
  1.利用insert(p,b,e)进行插入 
  #include<iostream>
  #include<vector>
  using namespace std; 
  int main()
  {
vector<int> iVec;
int i;
for(i=0;i<5;i++)
{
iVec.push_back(i);
}
  iVec.insert(iVec.begin(),iVec.begin()+2,iVec.end())
  vector<int>::iterator iIter1;//申请了容器的迭代器
iIter1=iVec.begin();

while(iIter1!=iVec.end())
{
cout<<*iIter1<<endl;
iIter1++;
}
  return 1;
  }
  分析结果应该是 2 3 4 0 1 2 3 4但实际的结果是2 0 1 0 1 2 3 4 这是为什么啊

  2.这个是关于pair 类型的,pair类型用作函数参数时怎么使用,能否不指定其数值的类型而是
  做一个模板,能的话该怎么做
  例如打印pair print(pair<type1,type2> a),类型是根据传进来的参数a自行判断 这可以实现么、、、


  我真的很菜啊!

------解决方案--------------------
插入的时候更改了v的内容,插入源改变了
------解决方案--------------------
0 1 2 3 4
它是一个一个插入,而且自己插入自己,数据位置在变
先插入2
2 0 1 2 3 4
再分别插入2后两个元素,这时原来iVec.begin()+2指向第二个位置的变成指向第一个位置
2 0 1 0 1 2 3 4
------解决方案--------------------
我在VC2005中输出的结果是2 3 4 0 1 2 3 4,
这跟标准库的具体实现相关的,建议避免使用这种未定义的行为。

------解决方案--------------------
探讨
引用:
0 1 2 3 4
它是一个一个插入,而且自己插入自己,数据位置在变
先插入2
2 0 1 2 3 4
再分别插入2后两个元素,这时原来iVec.begin()+2指向第二个位置的变成指向第一个位置
2 0 1 0 1 2 3 4


后两个要怎么插入?