vector容器的迭代器失效有关问题

vector容器的迭代器失效问题
#include<iostream>
#include<vector>
#include<list>

int main()
{
std::vector<int>   list_;
int number;
    while(std::cin >> number)
{
list_.push_back(number);
}
std::cin.clear();
std::vector<int>::iterator    first = list_.begin(),
                        last  = list_.end();
while(std::cin >> number)
{
list_.insert(first,number);
}
for(std::vector<int>::iterator dex = list_.begin(); dex != list_.end(); ++ dex)
{
std::cout <<*dex << " ";
}
return 0;
}

请问一下这个里面的迭代器为什么会失效?他不是一直指的是数组中的一个固定的地址吗??那为什么在同一个地方进行数据的插入会出现debug??而list却是可以实现的.难道每插入一个元素的时候他的首地址改变导致后面的地址会改变??可是在容器中加入数据也不行,不明白怎么才叫迭代器失效?

------解决方案--------------------
vector::insert 会导致迭代器失效,因此 first 和 last 在 while 以后已经不能用了。
------解决方案--------------------
   你要知道vector相当于一个动态可增长的数组,如果当前的长度不能满足需求,vector内部会重新分配新的内存,并将旧的内存数据拷贝到新分配的内存上,最后再释放掉旧内存。
    可以参考下面这个例子。断言会失败。
    	vector<int> v;
v.reserve(10);
v.push_back(1);

vector<int>::iterator it = v.begin();
int* p = it.operator ->();

v.reserve(100);
it = v.begin();
int* q = it.operator ->(); 

assert(p==q);

------解决方案--------------------
    所以如果vector进行insert操作,可能会导致内存重新。原先的迭代器指向的旧内存可能被释放掉了。相当于迭代器就失效了,因此不要在继续使用了。
------解决方案--------------------
    关于stl的任何疑问,参考《c++标准程序库》《stl源码剖析》。侯捷译。
------解决方案--------------------
   c++已经规定这种迭代器会失效了。就不要使用这种行为了。为啥非要行一次呢?
------解决方案--------------------