检验vector::iterator在push了N元素后的有效性
对于那些iterator会不会失效、会在什么时候失效一直不太明白。于是就想自己验证一下。第一个动手的是vector的iterator。
我的方法是:
先push一个0,记录begin()值和begin()元素的值。
然后,从1开始push,使vector一定要重新分配内存。这样没有两个元素相等。
再就开始比较:从begin()到end(),找是否有与原来的begin()相等并且也指向0的。如果有,表示原来的iterator有效;没有,则原来的iterator已经失效了。
我测试的结果是“失效”。
不知我的方法对不对。我想是很不完善的。
我想得到完整的关于iterator的“时效性”问题的答案。请各位说说吧。
#include <vector>
#include <iostream>
#include <cstdlib>
using namespace std;
int main ()
{
vector<int> vec;
vec.push_back (0);
vector<int>::const_iterator ivec1 = vec.begin();
int i1 = *ivec1;
int l = vec.capacity () * 2 + 1;
for (int i=0; i<l; i++)
vec.push_back (i+1);
vector<int>::const_iterator ivec=vec.begin(), e=vec.end();
for (; ivec != e; ++ivec)
if ((ivec1 == ivec) && (i1 = *ivec))
{
cout << "OK! The old iterator of vector is in effect!" << endl;
break;
}
if (ivec == e)
{
cout << "The old iterator of vector is nullity!" << endl;
}
system ("Pause");
return 0;
}