概述
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;
最后
以上就是知性大树为你收集整理的C++(4):特殊循环--范围for和迭代器循环的全部内容,希望文章能够帮你解决C++(4):特殊循环--范围for和迭代器循环所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复