c++ find_if()函数查找自定义类型时返回的结束迭代器在for循环中不能结束循环
// 对于基本数据类型没有问题
for (vector<int>::iterator it = v1.begin(); it != v1.end(); it++)
{
it = find_if(it, v1.end(), find2X); // 返回符合的迭代器(2的倍数)
if (it != v1.end())
{
cout << "Find!" << (*it) << endl;
}
cout << endl;
}
// 自定义数据
for (vector::iterator itc = vc.begin(); itc != vc.end(); itc++) // 遍历
{
// ??? find_if 返回的结束迭代器在if(itc != vc.end())中为true,在for中 itc != vc.end() ==false
itc = find_if(itc, vc.end(), findCPerson5X); // 返回符合的迭代器
if (itc != vc.end())
cout << "找到" << itc->m_Name << ":" << itc->m_Age << endl;
cout << endl;
}
为什么返回的结束迭代器在if(itc != vc.end())中为true,在for中 itc != vc.end() 为false
?你在想什么?每次find_if都将你的itc的结果改掉了,你相当于两个地方修改itc,一个是for循环中的++,一个是find_if,如果没有找到元素,itc就等于end了,所以没找到的话,itc=vc.end()了,就出现你上面的问题了。