关闭

vector中使用迭代器注意事项

标签: vector迭代器
82人阅读 评论(0) 收藏 举报
分类:

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,将会变成死循环。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:264次
    • 积分:31
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档