C++ iterator遍历 以前没注意到的一个点 前置递增和后置递增

博客介绍了在使用C++迭代器遍历容器时,前置递增(++pos)与后置递增(pos++)的差异。后置递增需要创建临时对象以保存迭代器原始位置并返回,导致效率较低,而前置递增直接对迭代器自身操作,效率更高。
摘要由CSDN通过智能技术生成

今天看C++标准库

以前用vector 没有 注意到

书上总结

迭代器的遍历 

	for (vector<int>::iterator pos = m.begin(); pos != m.end(); ++pos)    	                                                 
	{
		cout << *pos;
	}

为什么用++pos而不是pos++

下面  解释了使用前置式递增preincrement的优点,它比后置式递增postincrement效率高。

后者内部需要一个临时对象,因为他必须存放迭代器的原本位置并返回之

_Myiter& operator++()                                //前置++重载
		{	// preincrement
		++*(_Mybase *)this;
		return (*this);
		}

	_Myiter operator++(int)                    //有int参数 后置++重载
		{	// postincrement
		_Myiter _Tmp = *this;
		++*this;
		return (_Tmp);
		}
后置式递增特点,在很多类运算符重载中,都需要为后置++和--在函数中定义一个临时变量,用于保存被更改之前变量的值作为返回值,然后在函数体中队变量进行相应操作。

Object a,b;

b=a++; 直观上来看,在a++中进行赋值操作前不能把a值改变, a的值赋前已经改变,只是b接受的是a改变前的副本temp当作的返回值



而前置式为先做自增自减运算,所以只需要对本身进行操作然后返回。

由于后置式多出了这一步,所以效率低。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用迭代器遍历std::map。下面是一个示例代码: ``` #include <iostream> #include <map> int main() { std::map<int, int> myMap; myMap[0] = 1; myMap[1] = 2; myMap[2] = 3; std::map<int, int>::iterator it; for (it = myMap.begin(); it != myMap.end(); ++it) { std::cout << it->first << " => " << it->second << '\n'; } return 0; } ``` 这段代码将使用迭代器遍历map,并打印出每一对键值。 ### 回答2: 在C++中,map是一种内置容器,用于存储一些键值对。当我们需要遍历map容器时,可以使用迭代器iterator,它是一种指向容器元素的对象,可以通过它访问map中的每个元素。 使用迭代器iterator遍历map时,需要先定义一个迭代器,然后通过循环语句来遍历map中的每个元素。以下是使用迭代器iterator遍历map的示例程序: ``` #include <iostream> #include <map> using namespace std; int main() { // 定义一个map容器 map<int,string> myMap; // 往map容器中添加元素 myMap.insert(pair<int,string>(1,"apple")); myMap.insert(pair<int,string>(2,"banana")); myMap.insert(pair<int,string>(3,"pear")); // 定义一个迭代器iterator map<int,string>::iterator it; // 遍历map容器中的每个元素 for(it=myMap.begin(); it!=myMap.end(); ++it) { cout<<"key="<<it->first<<", value="<<it->second<<endl; } return 0; } ``` 上述程序中,首先定义了一个map容器myMap,并添加了三个元素。然后定义一个迭代器iterator it,通过循环语句遍历了map容器中的每个元素,输出了它们的键值对。 需要注意的是,在遍历map容器时,应该从begin()开始循环到end(),并使用箭头运算符->来访问每个元素的键与值。 在使用map容器时,使用迭代器iterator遍历map是一种非常方便和高效的方法,它可以让我们方便地访问map中的每个元素。 ### 回答3: 迭代器(iterator)是C++语言中非常重要的一个概念,它是STL(标准模板库)中许多STL容器的一种通用的访问机制,其中就包括map(映射容器)。在STL之前,为了对一个容器中的对象进行遍历,需要使用指针或数组来进行遍历,效率较低并且操作不够便捷。而迭代器方法则被广泛采用,具有高效、类型安全、灵活等优点。 在C++中,要遍历一个map,可以通过使用迭代器来完成。迭代器C++中最基本的容器适配器之一,它是一个指针对象,可以通过它来访问容器中的元素。对于map容器来说,它的元素是由键(key)和值(value)组成,我们可以通过迭代器来获取或修改map中元素的键值对。 遍历一个map容器的迭代器使用方法如下: ``` //假设有一个map容器m map<int, string> m; //使用迭代器遍历map容器 for(map<int, string>::iterator it = m.begin(); it != m.end(); it++){ cout << it->first << " : " << it->second << endl; } ``` 通过上述代码可以看出,迭代器遍历map容器时有以下三个关键步骤: 1. 使用m.begin()方法获取map的起始迭代器,即指向map第一个元素的迭代器; 2. 使用m.end()方法获取map的结束迭代器,即指向map最后一个元素的迭代器的下一个位置; 3. 使用for循环对起始迭代器进行迭代,并对迭代器的指向元素进行操作。 其中,对于map容器的迭代器使用,还有两个方法需要介绍: 1. map容器的迭代器是支持“++”操作符的,即用“++”运算符来将迭代器移动到下一个位置(指向下一个键值对); 2. 对于map容器的迭代器来说,it->first表示键,it->second表示值。即通过迭代器访问map中的键值对时,可用it->first来获取其键,用it->second来获取其值。 总之,使用迭代器遍历map容器,可以极大地方便我们对map容器中的元素进行操作,提高我们的编程效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值