C++学习:迭代器iterator的使用
简介:
迭代器是面向对象版本的指针
指针可以指向内存中的一个地址,迭代器可以指向容器中的一个位置,用来遍历STL容器的全部或者部分元素
在STL的每一个容器模板中都定义了一组对应的迭代器类
操作 | 效果 |
---|---|
* | 返回当前位置上元素数值,如果该元素有成员,可以通过迭代器以operate->取用,如it->first/it->second |
++ | 将迭代器前进之下一个元素 |
==&!= | 判断两个迭代器是否指向同一个位置 |
= | 为迭代器赋值 |
提示
博主:章飞_906285288
博客地址:http://blog.csdn.net/qq_29924041
获得迭代器
迭代器
迭代器 | 描述 |
---|---|
input_iterator | 提供读功能的向前移动迭代器,它们可被进行增加(++),比较与解引用(*) |
output_iterator | 提供写功能的向前移动迭代器,它们可被进行增加(++),比较与解引用(*) |
forward_iterator | 可向前移动的,同时具有读写功能的迭代器。同时具有input和output迭代器的功能,并可对迭代器的值进行储存 |
bidirectional_iterator | 双向迭代器,同时提供读写功能,同forward迭代器,但可用来进行增加(++)或减少(–)操作 |
random_iterator | 随机迭代器,提供随机读写功能.是功能最强大的迭代器, 具有双向迭代器的全部功能,同时实现指针般的算术与比较运算 |
reverse_iterator | 如同随机迭代器或双向迭代器,但其移动是反向的。(Either a random iterator or a bidirectional iterator that moves in reverse direction.)(我不太理解它的行为) |
所有容器都提供获得迭代器的函数:
操作 | 效果 |
---|---|
begin() | 返回一个迭代器,指向第一个元素 |
end() | 返回一个迭代器,指向序列结束 |
代码案例:
以下是结合vector向量(动态数组)来展示一下迭代器的用法
/*
* ===========================================================================
*
* Filename: iteratorTest.cpp
* Description:
* Version: 1.0
* Created: 2017年06月29日 22时42分11秒
* Revision: none
* Compiler: gcc
* Author: (),
* Company:
*
* ===========================================================================
*/
#include<iostream>
#include<vector>
using namespace::std;
int main(){
int array[10] = {1,11,111,2,22,222,3,33,333,4};
vector<int> vec;
for(int i = 0 ; i < 10; i++ ) {
vec.push_back(array[i]);
}
vector<int>::iterator it;
it = vec.begin();
cout<<"the first value:"<<*it<<endl;
//删除最后一个元素
vec.pop_back();
//迭代器的循环遍历方式
for(it = vec.begin();it!=vec.end();it++){
cout<<"the value:"<< *it <<endl;
}
//创建一个反向迭代器(记住使用的是rbegin和rend函数)
vector<int>::reverse_iterator rit;
rit = vec.rbegin();
cout<<"the last value:"<<*rit<<endl;
for(rit = vec.rbegin();rit!=vec.rend();rit++){
cout<<"the value:"<<*rit<<endl;
}
return 0;
}