zoukankan      html  css  js  c++  java
  • [C++ STL] 迭代器(iterator)详解

    一、迭代器(iterator)介绍

    指针可以用来遍历存储空间连续的数据结构,但是对于存储空间非连续的,就需要寻找一个行为类似指针的类,来对非数组的数据结构进行遍历。因此,我们引入迭代器概念。

    迭代器(Iterator)是一种检查容器内元素并遍历元素的数据类型。迭代器是指针的泛化,它允许程序员用相同的方式处理不同的数据结构(容器)。


    1、头文件

    所有容器有含有其各自的迭代器型别(iterator types),所以当你使用一般的容器迭代器时,并不需要含入专门的头文件。不过有几种特别的迭代器,例如逆向迭代器,被定义于 <iterator> 中。


    2 迭代器类型

    迭代器共分为五种,分别为: 输入迭代器(Input iterator)、输出迭代器(Output iterator)、前向迭代器(Forward iterator)、双向迭代器(Bidirectional iterator)、随机存取迭代器(Random access iterator)。


    二、容器迭代器的使用

    下面列举了些例子说明各个容器的用法:


    1、vector

    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    int main(int argc, char* argv[])
    {
        // Create and populate the vector
    	vector<int> vecTemp;
    	for (int i = 0; i<6; i++)
    	{
    		vecTemp.push_back(i);
    	}
    
        // Display contents of vector
    	cout <<"Original deque: ";    
    	vector<int>::iterator it;
    	for (it = vecTemp.begin(); it!=vecTemp.end(); it++)
    	{
    		cout <<*it <<" ";
    	}
    
    	return 0;
    }
    
    /*
    输出结果:
    Original deque: 0 1 2 3 4 5
    */
    

    2、deque

    #include <iostream>
    #include <deque>
    
    using namespace std;
    
    int main(int argc, char* argv[])
    {
    	// Create and populate the deque
    	deque<int> dequeTemp;
    	for (int i = 0; i<6; i++)
    	{
    		dequeTemp.push_back(i);
    	}
    
    	// Display contents of deque
    	cout <<"Original deque: ";
    	deque<int>::iterator it;
    	for (it = dequeTemp.begin(); it != dequeTemp.end(); it++)
    	{
    		cout <<*it <<" ";
    	}
    	cout <<endl;
    
    	return 0;
    }
    /*
    输出结果:
    Original deque: 0 1 2 3 4 5
    */
    

    3、list

    #include <iostream>
    #include <list>
    
    using namespace std;
    
    int main(int argc, char* argv[])
    {
    	// Create and populate the list
    	list<int> listTemp;
    	for (int i = 0; i<6; i++)
    	{
    		listTemp.push_back(i);
    	}
    
    	// Display contents of list
    	cout << "Original list: ";
    	list<int>::iterator it;
    	for (it = listTemp.begin(); it != listTemp.end(); it++)
    	{
    		cout << *it << " ";
    	}
    	cout << endl;
    
    	// Insert five 9 into the list
    	list<int>::iterator itStart = listTemp.begin();
    	listTemp.insert(itStart,5,9);
    
    	// Display the result
    	cout << "Result of list: ";
    	for (it = listTemp.begin(); it != listTemp.end(); it++)
    	{
    		cout << *it << " ";
    	}
    	cout << endl;
    
    	return 0;
    }
    /*
    输出结果:
    Original list: 0 1 2 3 4 5
    Result of list: 9 9 9 9 9 0 1 2 3 4 5
    */
    

    4、set

    #include <iostream>
    #include <set>
    
    using namespace std;
    
    int main(int argc, char* argv[])
    {
    	// Create and populate the set
    	set<char> setTemp;
    	for (int i = 0; i<6; i++)
    	{
    		setTemp.insert('F'-i);
    	}
    
    	// Display contents of set
    	cout <<"Original set: ";
    	set<char>::iterator it;
    	for (it = setTemp.begin(); it != setTemp.end(); it++)
    	{
    		cout <<*it <<" ";
    	}
    	cout <<endl;
    
    	return 0;
    }
    /*
    输出结果:
    Original set: A B C D E F
    */
    

    5、map

    #include <iostream>
    #include <map>
    
    using namespace std;
    
    typedef map<int, char> MyMap;
    
    int main(int argc, char* argv[])
    {
    	// Create and populate the map
    	MyMap mapTemp;
    	for (int i = 0; i<6; i++)
    	{
    		mapTemp[i] = ('F'-i);
    	}
    
    	// Display contents of map
    	cout <<"Original map: " <<endl;
    	MyMap::iterator it;
    	for (it = mapTemp.begin(); it != mapTemp.end(); it++)
    	{
    		cout << (*it).first << " --> ";
    		cout << (*it).second << std::endl;
    	}
    	cout <<endl;
    
    	return 0;
    }
    /*
    输出结果:
    Original map:
    0 --> F
    1 --> E
    2 --> D
    3 --> C
    4 --> B
    5 --> A
    */
    

  • 相关阅读:
    【[SDOI2014]旅行】
    【[USACO16OPEN]262144】
    【[SDOi2012]Longge的问题】
    【[POI2000]病毒】
    【不同子串个数】
    【工艺】
    Lambda使用深入解析
    Lambda表达式语法进一步巩固
    给之前绘制的图形菜单增加随触摸360度旋转效果
    给之前绘制的饼状图增加点击扩大突出效果
  • 原文地址:https://www.cnblogs.com/linuxAndMcu/p/10258285.html
Copyright © 2011-2022 走看看