C++的特殊循环:范围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;
	//names = oldstyle;
	names.assign(oldstyle.cbegin(), oldstyle.cend());		//范围for
	for (auto i : names)        //这里的auto自动判定对象类型
	{
		cout << i << endl;
	}
   return 0;
}

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

猜你喜欢

转载自blog.csdn.net/Leo_csdn_/article/details/81634267