vector中使用迭代器注意事项

原创 2016年05月31日 09:51:12

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

C++标准库---vector使用注意事项

使用vector需要注意的地方 1.vector支持随机存取,因此你只要知道元素的位置,可以在常数时间内存取任何一个元素; 2.在末端附加或删除元素,vector的性能相当好,但是在前端或中部安插...
  • lanzhihui_10086
  • lanzhihui_10086
  • 2014年11月29日 12:34
  • 1117

Vector容器与iterator迭代器

Vector容器与iterator迭代器 首先,回顾一下"::"的用法: ::是运算符中等级最高的,它分为三种: 1)global scope(全局作用域符),用法(::name) 2...
  • zheng__jun
  • zheng__jun
  • 2016年08月04日 14:49
  • 2762

c++ vector用法和迭代器

1.在c++中,vector是一个十分有用的容器,下面对这个容器做一下总结。 (1)头文件#include. (2)创建vector对象,vector vec; (3)初始化vect...
  • shang_zy
  • shang_zy
  • 2016年09月07日 20:12
  • 1935

泛型编程使用gcc编译器时的两个注意事项:关于typename和迭代器

其实,我想说的是,在使用模板类时要注意一点,即何时必须使用typename而不是class来指定模板类型形参。其实在C++神作《C++ Primer (特别版)》的第16章“模板和泛型编程”中已经说得...
  • qtyl1988
  • qtyl1988
  • 2012年03月07日 21:07
  • 1604

正确使用迭代器注意事项

正确使用迭代器注意事项
  • u012333003
  • u012333003
  • 2014年04月20日 14:57
  • 1322

C++ 反向迭代器注意事项

C++ 反向迭代器注意事项
  • Loversing
  • Loversing
  • 2017年01月13日 20:54
  • 149

集合遍历与迭代器注意事项--Java基础075

package com.sqf.conlection; import java.util.ArrayList; import java.util.List; import java.util.Lis...
  • qq_30638831
  • qq_30638831
  • 2017年05月26日 17:31
  • 175

STL基础2:模版迭代器的几点注意事项

以map容器为例: 第一:前置++和后置++的区别 1.使用typedef定义map容器的迭代器 typedef map::const_iterator CIT; 2.定义迭代器对象CIT ci...
  • longhuahaha
  • longhuahaha
  • 2012年12月18日 18:49
  • 1764

C++迭代器和标准库算法的注意事项——个人笔记

加油奋斗中.... 最近在看C++ Primer 第四版,陆续记一些自己觉得重要和平时出错过的地方: 1.用于指定范围的两个迭代器实参类型必须完全相同,不能无意间一个用const_iterator,而...
  • u010671090
  • u010671090
  • 2014年02月26日 01:03
  • 643

用迭代器实现二分查找&3.4.2练习(迭代器中.end()的注意事项)

1.用迭代器实现二分查找 #include #include #include using namespace std; int main() { int cnt = 0; vecto...
  • WJSZMD
  • WJSZMD
  • 2017年03月20日 15:49
  • 162
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:vector中使用迭代器注意事项
举报原因:
原因补充:

(最多只允许输入30个字)