首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++(STL):29 ---关联容器map 迭代

无论是前面学习的序列式容器,还是关联容器,要想实现遍历操作,就必须要用到该类型容器迭代。当然,map 容器也不例外。...这意味着,map 容器迭代只能进行 ++p、p++、--p、p--、*p 操作,并且迭代之间只能使用 == 或者 != 运算符进行比较。...成员方法 功能 begin() 返回指向容器中第一个(注意,是已排好序的第一个)键值对的双向迭代。如果 map 容器用 const 限定,则该方法返回的是 const 类型的双向迭代。...find(key) 在 map 容器中查找键为 key 的键值对,如果成功找到,则返回指向该键值对的双向迭代;反之,则返回和 end() 方法一样的迭代。...如果 map 容器用 const 限定,则该方法返回的是 const 类型的双向迭代。 upper_bound(key) 返回一个指向当前 map 容器中第一个大于 key 的键值对的迭代

80720

【C++】容器类_容器迭代

clear()删除所有元素 empty()如果list是空的则返回true end()返回末尾的迭代 erase()删除一个元素 front()返回第一个元素 get_allocator...()从list删除元素 remove_if()按指定条件删除元素 rend()指向list末尾的逆向迭代 resize()改变list的大小 reverse()把list的元素倒转 size...begin()返回指向容器第一个元素的迭代 end()返回指向容器最后一个元素的迭代 最后,要介绍的是C++中map容器的基本用法,也就是很常见的key-value对容器。...map末尾的迭代 equal_range()返回特殊条目的迭代对 erase()删除一个元素 find()查找一个元素 get_allocator()返回map的配置 insert()插入元素...rend()返回一个指向map头部的逆向迭代 size()返回map中元素的个数 swap()交换两个map upper_bound()返回键值>给定元素的第一个位置 value_comp

63710
您找到你想要的搜索结果了吗?
是的
没有找到

容器迭代和泛型

知识总结: 本周主要学习了容器迭代以及泛型: 一、对于容器的一些理解: ArrayList 底层实现是数组,有序,可重复 LinkedList 底层实现是链表 Set 底层实现是Map Map 键值对...,键不可以重复,值可以重复,但是后添加的值会覆盖前一次的值 二、迭代: 关于迭代的使用,一个容器迭代只能使用一次。...但是老师上课教会了另一种方法,在构建类的时候,可以将自定义的迭代进行封装为一个内部类,然后再构造相应的产生方法,这样就可以在自定义一个容器的时候,产生多个迭代,而不必通过构造容器来使用迭代。...自动转换类型 Integer score = stu.getJavase();//取出数据的时候,可以避免类型的混乱 } } 可以明显的看出,泛型就相当于是一个标签,在用户将数据丢入容器的时候...关于容器迭代、以及泛型的知识点还有很多,需要我们深入其中才可以了解透彻,博主只是根据自己的学习情况,将其中一些比较有意思的点提出来,供大家分享,希望大家能够满意哈!有问题的话,可以留言哟!

43030

【C++】STL 容器 - vector 动态数组容器 ⑥ ( 使用迭代遍历 vector 容器步骤 | 获取指容器向首元素的迭代 begin 函数 | 获取末尾迭代 | * 迭代解引用 )

一、 使用迭代遍历 vector 容器步骤 1、使用迭代遍历 vector 容器的步骤 使用 迭代 遍历 vector 容器 , 首先 , 获取 起始范围 迭代 , std::vector 类型的容器 , 其迭代类型是 vector::iterator , 调用 vector 类的 begin() 函数 , 可获取 指向容器中 第一个元素的迭代 ; vector...二、 iterator 迭代常用 api 简介 1、vector 容器类 begin 函数 - 获取指容器向首元素的迭代 调用 vector 容器类 begin 函数 , 可以 获取指容器向首元素的迭代...可以用来修改容器中的元素 ; 第二个重载版本函数 是 常量迭代 , 不能用来修改容器中的元素 ; 返回的迭代 可以使用 * 操作符进行解引用操作 , 获取迭代指向的元素的值 ; 代码示例 : #include...修改 vector 容器后 , end() 函数返回的迭代容器被修改时不会自动更新 ; 如果 vector 容器中的元素发生了改变 , 需要重新调用 end() 函数来获取新的末尾迭代 ; 代码示例

92010

【C++】STL 容器 - map 关联容器 ③ ( map 容器常用 api 操作 | map 容器迭代遍历 | map#insert 函数返回值处理 )

文章目录 一、map 容器迭代遍历 1、map 容器迭代 2、代码示例 二、map 容器插入结果处理 1、map#insert 函数返回值处理 2、代码示例 一、map 容器迭代遍历 1、map...容器迭代 C++ 语言中 标准模板库 ( STL ) 的 std::map 容器 提供了 begin() 成员函数 和 end() 成员函数 , 这两个函数 都返回一个迭代 , 指向容器中的元素 ;...std::map#begin() 成员函数 : 该函数返回指向容器中第一个元素的迭代 ; 对于std::map 容器来说 , 该元素是按键排序后的第一个键值对 ; 如果 map 容器为空 , 则返回的迭代就是...末尾迭代 ; std::map#end() 成员函数 : 该函数返回指向容器末尾位置的迭代 , 末尾位置实际上并不包含任何元素 , 而是作为遍历结束的标志 ; 如果通过 end() 末尾迭代来访问元素直接崩溃退出...; 迭代指向的 map 容器元素说明 : std::map 容器是一个关联容器 , 它存储的元素按键值自动排序 ; 每个元素是一个键值对 对组对象 , 即 std::pair<const Key,

20510

C++ 认识容器迭代

文章目录 1.错误的 map 删除操作 2.STL中容器迭代的底层实现机制 参考文献 1.错误的 map 删除操作 假设有个 map 容器,用于存储大学班级中各个家乡省份对应的学生数,key为省份中文全拼...(1)对于节点式容器(map, list, set)元素的删除,插入操作会导致指向该元素的迭代失效,其他元素迭代不受影响; (2)对于顺序式容器(vector,string,deque)元素的删除...2.STL中容器迭代的底层实现机制 提到STL,必须要马上想到其主要的6个组成部件,分别是:容器迭代、算法、仿函数、适配器和空间分配器,迭代是连接容器和算法的一种重要桥梁。...STL中容器迭代的本质是类对象,其作用类似于数据库中的游标(cursor),除此之外迭代也是一种设计模式。我们可以对它进行递增(或选择下一个)来访问容器中的元素,而无需知道它内部是如何实现的。...但是二者是完全不同的东西,指针代表元素的内存地址,即对象在内存中的存储位置,而迭代则代表元素在容器中的相对位置。

58020

关联容器

当解引用一个关联容器迭代的时候,会得到一个类型为容器的value_type 的值的引用。...关联容器中键值是无法通过迭代进行修改的。只能通过迭代读,每次修改键值都会导致容器中元素的重新排序。因此不允许通过迭代修改键值 我们通常不能对关联容器使用泛型算法。...这里无须返回一个bool值,因为insert总是向这类容器中加入一个新元素 关联容器定义了三个版本的erase。可以通过传入一个迭代或者一个迭代对来删除一个元素或者一个元素范围。...使用容器的find访问关联容器,传入key_type,如果能找到对应值,返回一个指向对应元素的迭代,否则返回一个指向容器end()位置的迭代的 使用容器的count方法,传入key_type,返回容器中相同关键字元素的个数...对于不允许存储重复关键字的关联容器来说,通过关键字查找元素只会找到一个,而对于允许重复关键字的关联容器来说,会返回第一个元素的迭代,而相同关键字的元素会相邻存储。

68020

C++认识容器迭代

(1)对于节点式容器(map, list, set)元素的删除,插入操作会导致指向该元素的迭代失效,其他元素迭代不受影响; (2)对于顺序式容器(vector,string,deque)元素的删除...解决方法有二,还是以上面的map容器为例,示例删除操作的正确实现: 方法一:当删除特定值的元素时,删除元素前保存当前被删除元素的下一个元素的迭代。...2.STL中容器迭代的底层实现机制 提到STL,必须要马上想到其主要的6个组成部件,分别是:容器迭代、算法、仿函数、适配器和空间分配器,迭代是连接容器和算法的一种重要桥梁。...STL中容器迭代的本质是类对象,其作用类似于数据库中的游标(cursor),除此之外迭代也是一种设计模式。我们可以对它进行递增(或选择下一个)来访问容器中的元素,而无需知道它内部是如何实现的。...但是二者是完全不同的东西,指针代表元素的内存地址,即对象在内存中的存储位置,而迭代则代表元素在容器中的相对位置。

1.2K10

关联容器小结

unordered_set unordered_multimap unordered_multiset 关联容器不支持和位置相关的操作,因为是按关键字顺序存储的,关联容器迭代都是双向的。...删除元素 关联容器有三个版本的erase操作,分别接受一个关键字,一个迭代和一对迭代。...2.find或者count(有序无序可用) 对于map和set都有自带的find和count版本,find会返回一个迭代,指向第一个关键字为参数的元素,但如果该关键字不存在,就返回尾后迭代。...所以对于同样的参数调用,如果lower_bound和upper_bound指向的迭代不相同,那么两个就是一个包含所有关键字k的迭代范围[b,e)。...当关键字存在时,两个迭代就是刚才用lower_bound和upper_bound得到的迭代。当不存在时,也返回不影响排序的关键字的插入位置。

44311

JDK容器学习之HashMap (三) : 迭代实现

HashMap 迭代实现方式 java的容器类,实现Collection接口的都会实现迭代方式,Map则有点特殊,它不实现Collection接口,它的迭代使用方式则主要借助Collection来实现...> { public final Map.Entry next() { return nextNode(); } } 首先 EntrySet 是一个 Set 对象,而Set的遍历采用迭代模式...table数组的扫描,因为原理大同小异,不再进行赘述, 看下面两个迭代基本就知道了 final class KeyIterator extends HashIterator implements...有意思的遍历思路 上面的遍历实现,非常的有意思,也有不小的借鉴意义,比如希望给一个对象的内部元素提供一些特殊的遍历方式,可以参考一下这种做法 实现思路: 内部类实现迭代 next方法实现成员变量的迭代逻辑...3, 相关博文 JDK容器学习之HashMap (一) : 底层存储结构分析 JDK容器学习之HashMap (二) : 读写逻辑详解 关注更多 关注 小灰灰blog

68750

【C++】STL 容器 - set 集合容器 ② ( set 集合容器常用 api 简介 | 使用迭代进行正向迭代与反向迭代 | 集合容器插入元素 | 插入单个元素 | 插入多个元素 )

一、set 集合容器遍历 1、使用迭代进行正向迭代与反向迭代 std::set 集合容器 提供了 begin、end、rbegin 和 rend 这几个成员函数,用于 获取 迭代访问链表中的元素 的...迭代 , 函数原型如下 : 获取首元素迭代 : 返回一个迭代 , 指向集合的第一个元素 ; iterator begin(); const_iterator begin() const; 获取尾元素之后的迭代...end() const; 获取指向尾元素的反向迭代 : 该函数返回一个反向迭代 , 指向集合容器的最后一个元素 ; 如果集合容器为空 , 则此操作未定义 ; 反向迭代从集合的尾部向头部移动 ;...获取指向首元素之前的反向迭代 : 返回一个反向迭代 , 指向集合的 超出头部 ”的位置 , 即第一个元素的前一个位置 ; 该迭代 它用于与 rbegin 一起实现完整的逆向迭代 ; reverse_iterator...rend(); const_reverse_iterator rend() const; 迭代的位置如下图所示 : 正向迭代示例 : // 遍历 set 集合容器 , 正向迭代 for (set

34210

第 11 章 关联容器

, "James"}, {"Austen", "Jane"} }; map或 set中的关键字必须是唯一的,用含有重复元素的容器迭代来初始化...在使用作用域运算符来提取一个类型成员时,记得加上模板参数: map::value_type v3; 解引用一个关联容器迭代时,会得到一个类型为容器的 value_type...其 first成员是一个迭代,指向具有给定关键字的元素;second成员具有一个 bool值,指出元素插入是否成功。...通常情况下,解引用一个迭代与下标运算符的返回类型是一样的。但对于 map则不然。解引用——>value_type,下标——>mapped_type。 c.at(k)。...c.find(k),返回一个迭代,指向第一个关键字为 k的元素。若 k不在容器中,则返回尾后迭代。 c.count(k),返回关键字等于 k的元素的数量。

53140

疯子的算法总结(三) STL Ⅱ迭代(iterator) + 容器

定义:迭代是一种检查容器内元素并遍历元素的数据类型。 迭代提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围。...迭代和指针的区别: 容器和string有迭代类型同时拥有返回迭代的成员。...false p>=p1 p的位置在p1的后面或同一位置时返回true,否则返回false 只有顺序容器关联容器支持迭代遍历,各容器支持的迭代的类别如下: 容器 支持的迭代类别 说明 vector...map 双向 一种包含成对数值的容器,一个值是实际数据值,另一个是用来寻找数据的关键字。一个特定的关键字只能与一个元素关联。...multimap 双向 一种包含成对数值的容器,一个值是实际数据值,另一个是用来寻找数据的关键字。一个关键字可以与多个数据元素关联

73920

迭代

集合面试点汇总 我们会在这里介绍我所涉及到的集合相关的面试点内容,本篇内容持续更新 我们会介绍下述集合的相关面试点: 迭代 ArrayList LinkedList HashMap 迭代 这里我们来介绍一下迭代的面试点...迭代中断处理机制 迭代是操作集合的工具,当我们已经创建了一个迭代之后,我们就不能再对原集合进行修改,否则可能报错出现问题 实际上迭代对于中途修改集合的操作给出了两个处理方式: fail-fast...我们直接从底层方法讲起: /*Itr迭代通常使用fail-fast中断处理机制*/ /*判断如何发生其他进程修改集合*/ private class Itr implements Iterator...int expectedModCount = modCount; // 我们会使用hasNext和next方法进行迭代foreach public boolean...我们同样从底层代码查看: /*COWIterator迭代采用的fail-safe处理方法*/ static final class COWIterator implements ListIterator

62040

迭代(iterable)和迭代

简介: 迭代(iterable) #任何可迭代对象都可以作用于for循环,包括我们自定义的数据类型,只要符合迭代条件,就可以使用for循环 d = {'a': 1, 'b': 2, 'c': 3} #对...dict迭代 for k,v in d.迭代(iterable)#任何可迭代对象都可以作用于for循环,包括我们自定义的数据类型,只要符合迭代条件,就可以使用for循环d = {'a': 1, 'b':...,dict迭代的是key # 如果要迭代value,可以用for value in d.values()#字符串也是可迭代对象,因此,也可以作用于for循环#如何判断一个对象是可迭代对象呢?...(names): #for循环同时引用两个变量print(i,value)for x,y in [(1,2),(3,5),(5,6)]: ##for循环同时引用两个变量print(x,y)迭代可以直接作用于...#可以被next()函数调用并不断返回下一个值的对象称为迭代:Iterator#生成器都是Iterator对象,但list、dict、str虽然是Iterable,却不是Iterator。

79620

迭代

目录 可迭代对象(掌握) 总结 迭代对象(掌握) 总结 for循环原理(掌握) 迭代迭代的工具。...__next__()) except StopIteration: break h e l l o 总结 迭代对象:执行可迭代对象的__iter__方法,拿到的返回值就是迭代对象...特点: 内置__next__方法,执行该方法会拿到迭代对象中的一个值 内置有__iter__方法,执行该方法会拿到迭代本身 文件本身就是迭代对象。...lis = [1, 2, 3] for i in lis: print(i) 1 2 3 因为迭代器使用__iter__后还是迭代本身,因此for循环不用考虑in后的对象是可迭代对象还是迭代对象...由于对可迭代对象使用__iter__方法后变成一个迭代对象,这个迭代对象只是占用了一小块内存空间,他只有使用__next__后才会吐出一个一个值。

49330

iterator迭代详解_迭代是什么

迭代 Iterator 动机 模式定义 实例 结构 要点总结 笔记 动机 在软件构建过程中,集合对象内部结构常常变化各异.但对于这些集合对象.我们希望在不暴露其内部结构地同时.可以让外部客户代码透明地访问其中包含地元素...使用面向对象技术将这种便利机制抽象为”迭代对象”为”应对变化中地集合对象”提供了一种优雅地方式 模式定义 提供了一种方法顺序访问一个聚合对象中地各个元素,而又不暴露(稳定)该对象地内部表示....实例 结构 要点总结 迭代抽象:访问一个聚合对象的内部不需要了解他的具体实现细节 迭代多态:为遍历不同的集合结构提供一个统一的接口.从而支持同样的算法在不通的集合结构上进行操作 迭代的健壮性考虑:遍历的同时更改迭代所在的集合结构...,会导致问题 笔记 虚函数也有成本 模板也是一种多态技术 但是模板是编译时多态 编译在编译的时候会辨别调用的那些代码 由于时代变化 面向对象模板设计结构已经老了 上述内容讲的是面向对象式的迭代 C+...+98之后标准的迭代式使用模板描述的 其他语言好多有不支持编译时模板 所以好多语言java C#等都式用的面向对象迭代 思想都是通过迭代来隔离算法和容器 但是实现的技术已经发生了变化 发布者:全栈程序员栈长

42620

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券