C++(4):特殊循环--范围for和迭代器循环

C和C++编程都少不了循环这种最基本的结构,在C中,循环无非for和while,使用的方式主要就是数值自增自减,或者指针前进后退,如

int i;
for(i=0;i<n;i++)
{
    //循环体
}
int *p;
while(p++ != null)
{
    //循环体
}

在C++中,当然这两种已然可以使用,不过由于C++中新增了许多类型和模板,因此也加入了其他方式的循环用于遍历这些相应的对象。

这里只做使用上的简单介绍,对于原理不做赘述。

第一种,迭代器类型:iterator

迭代器我把它理解成另类指针,在循环里,一般都是指向容器的开头和结尾,具体使用如下

int main()
{
    list<string> u;                    //string类型的list对象u
    list<string>::iterator v;        //要用遍历的对象的类型来定义迭代器v
     
    u.push_back("ok1500");
    u.push_back("ok2002");
    u.push_front("ok1700");
    u.push_front("hello");
    for(v=u.begin();v!=u.end();++v)    //begin()指向容器开头,end()指向容器结尾的下一个,是容器自带成员函数
        cout<<*v<<endl;                  // *v 取出对应数据,指针操作
    return 0;
}

第二种,范围for

int main()
{

	vector<const char*> oldstyle;
	oldstyle.push_back("getout!");
	oldstyle.push_back("ok");
	oldstyle.push_back("now!");
	list<string> names;

	//范围for
	for (auto i : names)        //这里的auto自动判定对象类型
	{
		cout << i << endl;
	}
   return 0;
}

范围for是c++11新增的,更加简便的遍历容器对象,auto自动获取对象类型并定义相关对象内变量,这里定义出的i相当于names容器里的一个成员,从第一个自动跟随循环移动到最后一个,非常方便。

在范围for循环操作ostream_iterator迭代器类型时,有一种情况要注意,如下

	ostream_iterator<int> out_iter(cout, " ");    //将int类型值写到输出流cout中,每个值后面跟一个空格
	vector<int> vec{ 1,2,3,4 };
	for (auto i : vec)
		*out_iter++ = i;	// * 和 ++ 实际上在此做不对out_iter任何操作,但是推荐这种写法,结构清晰易读

	//for (auto i : vec)
	//	out_iter = i;			//效果同上但不推荐,不便于修改成其他类型迭代器,并且容易误解代码逻辑
	
	cout << endl;

 

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++ std::map迭代器是用来遍历map容器中的元素的工具。迭代器可以指向map容器中的每个键值对,允许访问键和值。在C++中,有三种常用的迭代器类型:基础迭代器、反向迭代器和常量迭代器。 基础迭代器是通过`begin()`和`end()`函数来获取的。`begin()`函数返回指向map容器中第一个元素的迭代器,而`end()`函数返回指向map容器中最后一个元素之后位置的迭代器。基础迭代器可以使用自增运算符`++`来遍历map容器中的键值对,并通过解引用(*)操作符来获得键和值。例如,使用`map<string, int>::iterator`类型定义迭代器,并通过循环遍历map容器中的键值对,可以实现对map容器的遍历。 反向迭代器是通过`rbegin()`和`rend()`函数来获取的。`rbegin()`函数返回指向map容器中最后一个元素的迭代器,而`rend()`函数返回指向map容器中第一个元素之前位置的迭代器。反向迭代器可以使用自减运算符`--`来遍历map容器中的键值对,并通过解引用(*)操作符来获得键和值。反向迭代器可以实现对map容器的反向遍历。 常量迭代器是通过`cbegin()`和`cend()`函数来获取的。常量迭代器与基础迭代器类似,但是不能修改map容器中的元素。常量迭代器可以用于在不改变map容器的情况下遍历元素。 综上所述,C++ std::map迭代器是用于遍历map容器中的键值对的工具。基础迭代器、反向迭代器和常量迭代器分别用于正向遍历、反向遍历和只读遍历map容器。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [C++ std::map用迭代器遍历删除遇到的坑](https://blog.csdn.net/zidian666/article/details/125673395)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [C++map迭代器最全最容易理解](https://blog.csdn.net/qq_53547805/article/details/122146122)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值