首页 > 编程语言 >C++系列二:STL教程-容器+迭代器

C++系列二:STL教程-容器+迭代器

时间:2023-08-11 09:22:50浏览次数:33  
标签:容器 multimap hash iterator 迭代 STL C++ unordered

目录


前言

……。


容器

//容器种类	功能
1. 序列容器	主要包括 vector 、list 、deque。
元素在容器中的位置同元素的值无关,即容器不是排序的。将元素插入容器时,指定在什么位置,元素就会位于什么位置。
2. 排序容器	包括 set 、multiset、map 、multimap。
排序容器中的元素默认是由小到大排序好的,即便是插入元素,元素也会插入到适当位置。所以关联容器在查找时具有非常好的性能。
3. 哈希容器 hash_set、hash_multiset、hash_map、hash_multimap。(unordered_set,unordered_multiset,unordered_map, unordered_multimap)
和排序容器不同,哈希容器中的元素是未排序的,元素的位置由哈希函数确定。


//容器、底层数据结构、特点
//vector(向量)	        数组	支持快速随机访问
//list(列表)            双向链表	支持快速增删
//deque(双队列)            一个中央控制器和多个缓冲区	支持首尾(中间不能)快速增删,也支持随机访问
//stack(栈)       list 和 deque 实现,封闭头部即可,不用 vector 的原因应该是容量大小有限制 扩容耗时
//queue(队列)	            同上
//priority_queue(优先队列)    vector 为底层容器	堆 heap 为处理规则来管理底层容器实现
//set(集合)	                       红黑树	      有序,不重复
//multiset(多重集合)	           红黑树	      有序,不重复
//map(映射)	                       红黑树	      有序,不重复
//multimap(多重映射)	           红黑树	      有序,不重复
//hash_set(hash集合)	            hash 表	      无序,不重复
//hash_multiset(hash多重集合))	    hash 表	      无序,不重复
//hash_map(hash映射)	            hash 表	      无序,不重复
//hash_multimap(hash多重映射)	    hash 表	      无序,不重复

迭代器

//它可以是需要的任意类型,通过迭代器可以指向容器中的某个元素,如果需要,还可以对该元素进行读/写操作。
常用的迭代器按功能强弱分为输入迭代器、输出迭代器、前向迭代器、双向迭代器、随机访问迭代器 5 种。输入迭代器和输出迭代器比较特殊,它们不是把数组或容器当做操作对象,而是把输入流/输出流作为操作对象。
前向迭代器(forward iterator)
假设 p 是一个前向迭代器,则 p 支持 p,p,*p 操作,还可以被复制或赋值,可以用 == 和 != 运算符进行比较。此外,两个正向迭代器可以互相赋值。

双向迭代器(bidirectional iterator)
双向迭代器具有正向迭代器的全部功能,除此之外,假设 p 是一个双向迭代器,则还可以进行 --p 或者 p-- 操作(即一次向后移动一个位置)。

随机访问迭代器(random access iterator)
随机访问迭代器具有双向迭代器的全部功能。除此之外,假设 p 是一个随机访问迭代器,i 是一个整型变量或常量,则 p 还支持以下操作:

array	随机访问迭代器
vector	随机访问迭代器
deque	随机访问迭代器
list	双向迭代器
set / multiset	双向迭代器
map / multimap	双向迭代器
forward_list	前向迭代器
unordered_map / unordered_multimap	前向迭代器
unordered_set / unordered_multiset	前向迭代器
stack	不支持迭代器
queue	不支持迭代器

正向迭代器	容器类名::iterator 迭代器名;
常量正向迭代器	容器类名::const_iterator 迭代器名;
反向迭代器	容器类名::reverse_iterator 迭代器名;
常量反向迭代器	容器类名::const_reverse_iterator 迭代器名;


标签:容器,multimap,hash,iterator,迭代,STL,C++,unordered
From: https://www.cnblogs.com/zhouyitty/p/17619475.html

相关文章

  • C++面试八股文:如何实现一个strncpy函数?
    C++面试八股文:如何实现一个strncpy函数?某日二师兄参加XXX科技公司的C++工程师开发岗位第31面:面试官:strcpy函数使用过吧?二师兄:用过。面试官:这个函数有什么作用?二师兄:主要用做字符串复制,将于字符从一个位置复制到另一个位置。面试官:strncpy函数也使用过吧,和strcpy有......
  • C++之输入输出流(控制台打印/读取数据)
    C++与流stream相关的头文件/库iostreamfstreamsstream分别对应:控制台IO流/文件流/字符串流,本文主要介绍控制台输出输出流cin>>空格分隔cout<<控制台输出已知待读取元素的数量:cin>>n未知待读取元素的数量:while(cin>>val)另外,可以整行读取数据,然后再解析字......
  • C++友元函数和友元类的使用
    1.友元介绍在C++中,友元(friend)是一种机制,允许某个类或函数访问其他类的私有成员。通过友元,可以授予其他类或函数对该类的私有成员的访问权限。友元关系在一些特定的情况下很有用,例如在类之间共享数据或实现特定的功能。友元可以分为两种类型:类友元和函数友元。2.类友元类友元(Friend......
  • 五子棋_c++版
    #include<bits/stdc++.h>usingnamespacestd;intlie=16,hang=16,lie_shu,hang_shu;intblack_flag[16][16];boolblack=true;intall[16][16];voidf5(){system("cls");for(intj=0;j<=hang;j++){cout<<setw(3)<<......
  • C++/嵌入式八股学习-day3
    目录C++/嵌入式八股学习-day3C/C++使用指针传递大容量参数如何禁止程序自动生成拷贝构造函数?final和override关键字C++类内可以定义引用数据成员吗?auto关键字成员函数里memset(this,0,sizeof(*this))会发生什么ARMSPIz总线的工作频率ARM内部传输数据的总线有哪些?IIC时钟拉伸应用编......
  • 后缀数组C++详解
    后缀定义“后缀i”代表以第i个字符开头的后缀,存储是用i代表字符串s的后缀s[i...n]后缀数组是什么?后缀数组(SuffixArray)主要关系到两个数组:sa和rk。其中,sa[i]表示将所有后缀排序后第i小的后缀的编号,也是所说的后缀数组,后文也称编号数组sa;rk[i]表示后缀i的排名,是重要......
  • 什么是迭代器,生成器,装饰器;django的信号用过吗?如何用,干过什么;什么是深拷贝,什么是浅拷贝
    什么是迭代器,生成器,装饰器;django的信号用过吗?如何用,干过什么;什么是深拷贝,什么是浅拷贝,如何使用什么是迭代器,生成器,装饰器#迭代器-迭代:一种不依赖于索引取值的方式,我们不需要关注它的位置,只要能够一个个取值,它就称之为迭代,python中就是for循环,内部调用对象.__next__()-可迭......
  • 分治算法C++
    1、光荣的梦想题目描述】Prince对他在这片陆上维护的秩序感到满意,于是决定启程离开艾泽拉斯。在他动身之前,Prince决定赋予King_Bette最强大的能量以守护世界、保卫这里的平衡与和谐。在那个时代,平衡是个梦想。因为有很多奇异的物种拥有各种不稳定的能量,平衡瞬间即被打破。KB决定求......
  • 广度优先搜索C++
    1、细胞(1)题目描述一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。如:阵列4100234500067103456050020456006710000000089有4个细胞。【输入】第一行为矩阵的行n和列m;下面为一个n×m......
  • 递归算法练习C++
    1、逆波兰表达式(1)题目描述逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2+3的逆波兰表示法为+23。逆波兰表达式的优点是运算符之间不必有优先级关系,也不必用括号改变运算次序,例如(2+3)*4的逆波兰表示法为*+234。本题求解逆波兰表达式的值,其中运算符包括......