读书人

iterator 有关问题

发布时间: 2012-04-07 17:31:51 作者: rapoo

iterator 问题
int _tmain(int argc, _TCHAR* argv[])
{
vector <int> vec;
vec.push_back(1);
vector <int> ::iterator iter=vec.begin();
vec.push_back(2);
//vector <int> ::iterator iter=vec.begin();

cout < < "vec.begin(): " < <*iter < <endl;
iter++;
cout < < "*iter: " < <*iter < <endl;
}
大家知道这个程序的输出结果是多少吗?改为如下形式输出又是多少呢?为什么会是这个结果阿?请高手指点一二
int _tmain(int argc, _TCHAR* argv[])
{
vector <int> vec;
vec.push_back(1);
//vector <int> ::iterator iter=vec.begin();
vec.push_back(2);
vector <int> ::iterator iter=vec.begin();

cout < < "vec.begin(): " < <*iter < <endl;
iter++;
cout < < "*iter: " < <*iter < <endl;
}




[解决办法]
第一个,程序行为未定义, 可能崩溃, 因为:
vector <int> ::iterator iter=vec.begin();
vec.push_back(2);
====>
iter已经无效了:)

[解决办法]
简短地说,vector内部是用数组存放对象的.在push_back()时有可能数组已满而重新申请空间并移动对象,造成旧begin()值不可用.
[解决办法]
try and you will know

读书人网 >C++

热点推荐