https://blog.csdn.net/bangdingshouji/article/details/73028424

参考:

  1. 资料一:http://www.cplusplus.com/reference/iterator/(第一参考,简单精要)
  2. 资料二:http://jjhou.boolan.com/programmer-3-traits.pdf(侯捷随笔,非常全面,有时间深刻可看)
  3. 资料三:http://en.cppreference.com/w/cpp/iterator(纯资料)
  4. https://blog.csdn.net/bangdingshouji/article/details/73028424

1.map的构造函数

Map<int, string>mapStudent;
2. 数据的插入
在构造map容器后
第一种:用insert函数插入pair数据
#pragma warning (disable:4786) )
#include <map>
#include
#include
Using namespace std;
Int main()
{
Map<int, string>mapStudent;
mapStudent.insert(pair<int, string>(1, “student_one”));
mapStudent.insert(pair<int, string>(2, “student_two”));
mapStudent.insert(pair<int, string>(3, “student_three”));
map<int, string>::iterator iter;
for(iter =mapStudent.begin(); iter !=mapStudent.end(); iter++)
{
Cout<first<<” ”<second<<end;
}
}
第二种:用insert函数插入value_type数据,下面举例说明
#include <map>
#include
#include
Using namespace std;
Int main()
{
Map<int, string>mapStudent;
mapStudent.insert(map<int, string>::value_type (1, “student_one”));
mapStudent.insert(map<int, string>::value_type (2, “student_two”));
mapStudent.insert(map<int, string>::value_type (3, “student_three”));
map<int, string>::iterator iter;
for(iter =mapStudent.begin(); iter !=mapStudent.end(); iter++)
{
Cout<first<<” ”<second<<end;
}
}
第三种:用数组方式插入数据,下面举例说明
#include <map>
#include
#include
Using namespace std;
Int main()
{
Map<int, string>mapStudent;
mapStudent[1] = “student_one”;
mapStudent[2] = “student_two”;
mapStudent[3] = “student_three”;
map<int, string>::iterator iter;
for(iter =mapStudent.begin(); iter !=mapStudent.end(); iter++)
{
Cout<first<<” ”<second<<end;
}
}
以上三种用法,虽然都可以实现数据的插入,但是它们是有区别的,当然了第一种和第二种在效果上是完成一样的,用insert函数插入数据,在数据的插入上涉及到集合的唯一性这个概念,即当map中有这个关键字时,insert操作是插入数据不了的,但是用数组方式就不同了,它可以覆盖以前该关键字对应的值,用程序说明

迭代器(iterator)是一中检查容器内元素并遍历元素的数据类型。

(1) 每种容器类型都定义了自己的迭代器类型,如vector:
vector::iterator iter;这条语句定义了一个名为iter的变量,它的数据类型是由vector定义的iterator类型。
(2) 使用迭代器读取vector中的每一个元素:
vector ivec(10,1);
for(vector::iterator iter=ivec.begin();iter!=ivec.end();++iter)
{
*iter=2; //使用 * 访问迭代器所指向的元素
}
const_iterator:
只能读取容器中的元素,而不能修改。
for(vector::const_iterator citer=ivec.begin();citer!=ivec.end();citer++)
{
cout<<*citer;
//*citer=3; error
}
vector::const_iterator 和 const vector::iterator的区别
const vector::iterator newiter=ivec.begin();
*newiter=11; //可以修改指向容器的元素
//newiter++; //迭代器本身不能被修改
(3) iterator的算术操作:
iterator除了进行++,–操作,可以将iter+n,iter-n赋给一个新的iteraor对象。还可以使用一个iterator减去另外一个iterator.
const vector::iterator newiter=ivec.begin();
vector::iterator newiter2=ivec.end();
cout<<" "<<newiter2-newiter;
一個很典型使用vector的STL程式:
1 #include
2 #include
3
4 using namespace std;
5
6 int main() {
7 vector ivec;
8 ivec.push_back(1);
9 ivec.push_back(2);
10 ivec.push_back(3);
11 ivec.push_back(4);
12
13 for(vector::iterator iter = ivec.begin();1. iter != ivec.end(); ++iter)
14 cout << *iter << endl;

15 }

迭代器可以很好的兼容C++的内置类型,特别是常见的C++指针被视为C++数组的迭代器。当然,在标准的C++库中所有的容器都定义了一个迭代器类型,即嵌套类型的迭代器,代表各自的指针类型。

迭代器Iterator的分类:

迭代器可以分为不同的种类,这是因为他们使用不同的算法、不同的要求附加在其身上。例如,find()算法需要一个可以递增的迭代器,而reverse()算法需要一个可以递减的迭代器等。总之,在STL和C++标准库中有5种迭代器。

  1. 输入迭代器(Input Iterator):只能向前单步迭代元素,不允许修改由该迭代器所引用的元素;
  2. 输出迭代器(Output Iterator):只能向前单步迭代元素,对由该迭代器所引用的元素只有写权限;
  3. 向前迭代器(Forward Iterator):该迭代器可以在一个区间中进行读写操作,它拥有输入迭代器的所有特性和输出迭代器的部分特性,以及向前单步迭代元素的能力;
  4. 双向迭代器(Bidirectional Iterator):在向前迭代器的基础上增加了向后单步迭代元素的能力;
  5. 随机访问迭代器(Random Access Iterator):不仅综合以后4种迭代器的所有功能,还可以像指针那样进行算术计算;

vector、deque提供的是随机访问迭代器,list提供的是双向迭代器,set和map提供的是向前迭代器。

  1. 迭代器(Iterator)的介绍

  2. 背景:指针可以用来遍历存储空间连续的数据结构,但是对于存储空间费连续的,就需要寻找一个行为类似指针的类,来对非数组的数据结构进行遍历。
    定义:迭代器是一种检查容器内元素并遍历元素的数据类型。
    迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围
    迭代器(Iterator)是指针(pointer)的泛化,它允许程序员用相同的方式处理不同的数据结构(容器)。
    (1)迭代器类似于C语言里面的指针类型,它提供了对对象的间接访问。
    (2)指针是C语言中的知识点,迭代器是C++中的知识点。指针较灵活,迭代器功能较丰富。
    (3)迭代器提供一个对容器对象或者string对象的访问方法,并定义了容器范围

  3. 迭代器和指针的区别:
    容器和string有迭代器类型同时拥有返回迭代器的成员。如:容器有成员begin和end,其中begin成员复制返回指向第一个元素的迭代器,而end成员返回指向容器尾元素的下一个位置的迭代器,也就是说end指示的是一个不存在的元素,所以end返回的是尾后迭代器

  4. 容器迭代器的使用
    每种容器类型都定义了自己的迭代器类型,如vector:vector< int>:: iterator iter;//定义一个名为iter的变量,数据类型是由vector< int>定义的iterator 类型。简单说就是容器类定义了自己的iterator类型,用于访问容器内的元素。每个容器定义了一种名为iterator的类型,这种类型支持迭代器的各种行为
    常用迭代器类型如下:

    如上图所示,迭代器类型主要支持两类,随机访问和双向访问。其中vector和deque支持随机访问,list,set,map等支持双向访问。
    1)随机访问:提供了对数组元素进行快速随机访问以及在序列尾部进行快速插入和删除操作。
    2)双向访问:插入和删除所花费的时间是固定的,与位置无关。

c++ 的map、iterator用法相关推荐

  1. STL 中map的用法详解

    STL 中map的用法详解 Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可 ...

  2. map函数作用c语言,C语言 · C++中map的用法详解

    转载自:http://blog.csdn.net/sunquana/article/details/12576729 一.定义 (1) mapMap; (2) 或者是:typedef   mapMym ...

  3. map函数作用c语言,c语言中map的用法:map基本用法

    c++中map容器提供一个键值对容器,那么你知道map的用法有哪些吗,下面秋天网 Qiutian.ZqNF.Com小编就跟你们详细介绍下c语言中map的用法,希望对你们有用. c语言中map的用法:m ...

  4. Java中entryset用法,keySet()、entrySet()和Map.Entry用法

    2019-11-16 package com.lixing.jihe13; import java.util.*; /** * @author: ZH * @date: 2019/10/25 10:4 ...

  5. java笔记--Map的用法

    Map 接口概述 我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同,如下图. Collection中的集合,元素是孤立存在的(理解为单身), ...

  6. js数组中foEach和map的用法详解 jq中的$.each和$.map

    数组中foEach和map的用法详解 相同点: 1.都是循环遍历数组(仅仅是数组)中的每一项. 2.forEach() 和 map() 里面每一次执行匿名函数都支持3个参数:数组中的当前项value, ...

  7. map iterator_一个简单的Map Iterator性能测试

    map iterator Java Map性能有很多方面可以衡量,但是关键的一个是简单的单线程扫描. 这是一些针对Iterators和Java 8 Map.forEach()简单测试代码,以及一些图形 ...

  8. java8 stream().map().collect()用法

    java8 stream().map().collect()用法 有一个集合: List<User> users = getList(); //从数据库查询的用户集合 现在想获取User的 ...

  9. linux 脚本map,shell中map的用法

    ##实例代码 #!/bin/bash cat ./switchsql.txt | while read line do tmp_partition_name=`echo $line | awk -F ...

  10. Shaolin(map+iterator) HDU - 4585

    Shaolin(map+iterator) HDU - 4585 少林寺以武僧而闻名.每年都有很多年轻人去少林寺当和尚.少林的主人评估一个年轻人主要通过他的人才了解佛教经文,但武功也考虑在内. 当一个 ...

最新文章

  1. 哪些模块可用于python性能分析_提升Python程序性能的方法有哪些?看完你就知道啦!...
  2. slidingmenu阻碍沉浸式实现的原理讲解,demo下载地址在github
  3. 两数之和,输入有序数组 leetcode C++
  4. Math中的常用方法
  5. 从地理围栏看物联网安防
  6. java channel源码_java nio ServerSocketChannel源码分析
  7. Python笔记(7) 字符串
  8. Python字符串有关的方法汇总
  9. Android应用程序消息处理机制(Looper、Handler)分析(3)
  10. java异常处理拦截器
  11. 扫描枪速度测试软件,条码扫描枪怎么测试
  12. 学生用计算机怎么恢复出厂设置,电脑怎么恢复出厂设置
  13. css完整总结:第二篇(尺寸,外补白,内补白,边框,背景,颜色,字体,文本,文本装饰)
  14. etlgr是什么服务器_什么是ETL,ETL工程师的的主要工作职责是什么?
  15. 如何在 Lightly 用 JavaScript 制作俄罗斯方块游戏
  16. 【文献调研】在Pubmed上搜索特定影响因子期刊上的论文
  17. 国内外互联网地图常用的几种坐标系统:概念,原理和应用
  18. 【趣味“五子棋”---html页面实现(附源代码)】
  19. OTA巨头的开局之战:战线逐渐下沉 边界更加模糊
  20. 英语四六级万能作文模板

热门文章

  1. 18个实时音视频开发中会用到开源项目
  2. JS及JQuery知识点
  3. 美国的国债钟网站的网址是多少?
  4. 异步编程-Future
  5. vue 使用Export2Excel导出Excel表格
  6. 利用java的JSoup爬虫技术爬取网页信息
  7. 规则引擎一:IBM规则引擎 ODM入门
  8. 百度搜索引擎优化(PHP自动推送连接到百度搜索引擎)代码
  9. 仿QQ空间、微信朋友圈点击评论弹出输入框
  10. java包无法打开变成压缩包的解决办法