1.使用iter++;和++iter;两种方式遍历的次数是相同的,但在STL中效率不同。前++返回引用,后++返回一个临时对象,因为iterator是类模板,使用 iter++这种形式要返回一个无用的临时对象,而it++是函数重载,所以编译器无法对其进行优化,所以每遍历一个元素,你就创建并销毁了一个无用的临时对象。
2.使用迭代器遍历时添加删除元素,可使用以下格式:
for(iter = trial.begin(); iter != trial.end(); )
{
if((*iter)->value == min_phi)
{
new_ind = 99; new_phi = 99; new_dphi = 99;
Elem * elem = new Elem(new_ind, new_phi, new_dphi);
trial.push_back(elem);
iter = trial.erase(iter);
}
else
{
cout << "ind = " << (*iter)->img_ind << " phi = " << (*iter)->value << " dphi = " << (*iter)->dvalue << endl ;
iter++;
}
}
需要注意的是,这样push_back进去的元素放在末尾,因此也会在遍历中被执行。因此,如果new_phi的值等于min_phi,将会变成死循环。