示例程序
vector<int> vec;
for(int i=0; i<10; ++i)
{
vec.push_back(i);
}
vector<int>::iterator ite = vec.begin();
printf("ite的值为%d/n", ite);
for(; ite != vec.end(); ++ite)
{
printf("ite:%d..", ite);
cout<<"vec:"<<*ite<<endl;
}
程序运行结果如下图:
可以看出,ite的值很奇怪。目前我还无法解释
总结:
1,大部分标准容器都定义了相应的迭代器,所以c语言中循环常用的下标操作在c++中最好改为迭代器操作
2, 用vec.begin()来初始化,用vec.end()来判断结束,并且是‘ite != vec.end()’,用‘!=’来判断。
3,用指针解引用来读写元素,*vec;
4,ite+n, ite-n , ite01 - ite02都是正确的操作
但是ite.begin()+ite.end()会报错。即迭代器不能互相相加。
5, cout<<ite<<endl; 该语句会报错:error C2679: 二进制“<<”: 没有找到接受“std::_Vector_iterator<_Ty,_Alloc>”类型的右操作数的运算符(或没有可接受的转换)
所以在示例程序中,我用了‘printf("ite的值为%d/n", ite);’来打印ite的值。
留下几点疑问等高人指点:
1 为什么ite的值没有变化?
2 ite是指针吗?如果不是,为何可以做指针解引用运算?
3 ite的值肯定是发生变化了,否则ite != vec.end()的判断就没有意义了。但是,ite != vec.end()的判断机理又是怎么回事?
令 ite = vec.end();
ite++;
程序编译正常,但是运行时会报错:error C2679: 二进制“<<”: 没有找到接受“std::_Vector_iterator<_Ty,_Alloc>”类型的右操作数的运算符(或没有可接受的转换)。不过,必须记住的是:对end()的返回值,不能做指针解引用或自增操作!
注:本程序在windows xp下,vs2005,c++。