迭代器

C++map的用法整理

匿名 (未验证) 提交于 2019-12-03 00:27:02
参考博客 点击打开链接 1、map简介 map是一类关联式容器。它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响。 对于迭代器来说,可以修改实值,而不能修改key。 2、map的功能 根据key值快速查找记录,查找的复杂度基本是Log (N),如果有1000个记录,最多查找10次,1,000,000个记录,最多查找20次。 快速删除记录 遍历所有记录。 3、使用map 使用map得包含map类所在的头文件 map对象是模板类,需要关键字和存储对象两个模板参数: std:map< int 这样就定义了一个用int作为索引,并拥有相关联的指向string的指针. 4. map的构造函数 map共提供了6个构造函数,这块涉及到内存分配器这些东西,略过不表,在下面我们将接触到一些map的构造方法,这里要说下的就是,我们通常用如下方法构造一个map: 在构造map容器后,我们就可以往里面插入数据了。这里讲三种插入数据的方法: 第一种: 用insert函数插入pair数据 #include <iostream> #include <cstdio> #include <cstdlib> #include <map> using namespace std ; int main() { map<int ,string > stu ; map<int

迭代器失效__2018.05.27

匿名 (未验证) 提交于 2019-12-03 00:22:01
在某个位置通过迭代器插入的时候,不能插入,:当前位置之后的迭代器失效了,当前位置之前的迭代器失效了。 insert(迭代器(位置),**) erase删除有重载,可以按位置删除也可以按值删除。 迭代器提供了*运算符重载函数。 种随机数种子:srand(time(0));//以系统时间为种子种随机数。 srand(time(0)); for (int i = 0; i < 20; ++i) { vec1.push_back(rand() % 100); } 泛型算法:指算法使用模板写的。 泛型算法=模板+迭代器+函数对象。 函数对象都在functional头文件中声明了。 有一个参数就叫一元函数对象,有两个参数就叫二元函数参数。 sort (vec.begin(),vec.end(),greater<int>()); find();都是找到就将该位置的迭代器返回,否则就返回end(); 迭代器失效:删除后,从删除位置往后的迭代器就都失效了,需要将迭代器更新一下。 通过返回值对迭代器进行更新,可以解决迭代器失效问题。 指针可以直接加整数,标=表示指针偏移量。 迭代器之所以能够直接相减是因为底层数据结构是数组,地址的连续的,像链表这样的数据结构就没有办法直接用迭代器的相减,因为地址不连续。 一次拉一点一次拉一点,后面就成听天书了。 vector的增删改查、时间复杂度。修改之前得先查询

HashMap的6个知识点

匿名 (未验证) 提交于 2019-12-03 00:21:02
HashMap的6个知识点: 概述: HashMap 是key-value数据结构 ,是基于哈希表的 Map 接口的 非同步 实现。此实现提供所有可选的映射操作,并 允许key和value为null 。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 的数据结构: HashMap 实际上是一个“链表散列”的数据结构,即 数组和链表 的结合体。 的读取实现: HashMap存储数据使用put()方法,该方法首先会将调用String的 hashCode() 方法得到其 hashCode 值――每个 Java 对象都有 hashCode() 方法,都可通过该方法获得它的 hashCode 值。得到这个对象的 hashCode 值之后,系统会根据该 hashCode 值来决定该元素的存储位置。如果该位置已经存在key值,则发生哈希冲突。 How:HashMap怎样解决哈希冲突? 链地址法:就是在冲突的位置上新建一个链表,然后将冲突的元素插入到链表尾端。 当HashMap调用get()方法获取value时,首先会根据key的hashcode()值到相应的Entry数组位置上,再如果只有一个key直接返回value,如果该数组位置存在链表维护多个key,则再使用equals(key)来获取相应的value值。 HashMap的4种遍历方式 的 resize ( rehash ): 当

向量vector 容器浅析

坚强是说给别人听的谎言 提交于 2019-12-03 00:17:54
一、什么是vector? 向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。 二、容器特性 1.顺序序列 顺序容器中的元素按照严格的线性顺序排序。可以通过元素在序列中的位置访问对应的元素。 2.动态数组 支持对序列中的任意元素进行快速直接访问,甚至可以通过指针算述进行该操作。操供了在序列末尾相对快速地添加/删除元素的操作。 3.能够感知内存分配器的(Allocator-aware) 容器使用一个内存分配器对象来动态地处理它的存储需求。 三、基本函数实现 1.构造函数 vector():创建一个空vector vector(int nSize):创建一个vector,元素个数为nSize vector(int nSize,const t& t):创建一个vector,元素个数为nSize,且值均为t vector(const vector&):复制构造函数 vector(begin,end):复制[begin,end)区间内另一个数组的元素到vector中 2.增加函数 void push_back(const T& x):向量尾部增加一个元素X iterator insert(iterator it,const T& x)

leetcode-284-顶端迭代器

匿名 (未验证) 提交于 2019-12-03 00:15:02
题目描述: class PeekingIterator: def __init__(self, iterator): """ Initialize your data structure here. :type iterator: Iterator """ self.iterator = iterator self.pre = None def peek(self): """ Returns the next element in the iteration without advancing the iterator. :rtype: int """ if self.pre: return self.pre self.pre = self.iterator.next() return self.pre def next(self): """ :rtype: int """ if self.pre: num = self.pre self.pre = None return num return self.iterator.next() def hasNext(self): """ :rtype: bool """ if self.pre: return True if self.iterator.hasNext(): return True return False 来源:博客园

点读系列《流畅的python》

我只是一个虾纸丫 提交于 2019-12-03 00:13:41
第1章 python数据模型 python的写法是由背后的魔法方法实现的,比如obj[key],解释器实际调用的是obj.__getitem__(key) 作者把魔法方法叫做双下方法,因为有两个下划线 collections.namedtuple可以用来创建只有少数属性但没有方法的对象,比如 beer_card = Card('7', 'diamonds') random.choice和random.sample不一样的地方在于,sample是返回序列,choice是返回元素,当使用sample(list, 1)[0]的时候,不如直接使用choice(list) deck[12::13],是指先抽出索引是12的那张牌,然后每向后数13张牌拿一张 实现了__getitem__让对象变得可迭代了 sorted(deck, key=spades_high) python sorted函数 suit_values = dict(spades=3, hearts=2, diamonds=1, clubs=0) def spades_high(card): rank_value = FrenchDeck.ranks.index(card.rank) return rank_value * len(suit_values) + suit_values[card.suit]

Spark RDD 算子总结

大城市里の小女人 提交于 2019-12-03 00:10:19
Spark算子总结 算子分类 Transformation(转换) 转换算子 含义 map(func) 返回一个新的RDD,该RDD由每一个输入元素经过func函数转换后组成 filter(func) 过滤, 返回一个新的RDD, 该RDD由经过func函数计算后返回值为true的输入元素组成 flatMap(func) 类似于map,但是每一个输入元素可以被映射为0或多个输出元素(所以func应该返回一个序列,而不是单一元素) mapPartitions(func) 类似于map,但独立地在RDD的每一个分片上运行,因此在类型为T的RDD上运行时,func的函数类型必须是Iterator[T] => Iterator[U] mapPartitionsWithIndex(func) 类似于mapPartitions,但func带有一个整数参数表示分片的索引值,因此在类型为T的RDD上运行时,func的函数类型必须是(Int, Interator[T]) => Iterator[U] union(otherDataset) 对源RDD和参数RDD求并集后返回一个新的RDD Intersection(otherDataset) 对源RDD和参数RDD求交集后返回一个新的RDD groupByKey([numTasks]) 在一个(K,V)的RDD上调用,返回一个(K, Iterator

C++――迭代器

匿名 (未验证) 提交于 2019-12-03 00:05:01
除了每个容器定义的迭代器外,iterator库内还定义了其他的迭代器。 1.插入迭代器:向容器中插入元素 1.1 back_inserter 1.2 front_inserter 1.3 inserter * it = val ; //上下等价 it = c . insert ( it , val ); //val插入it之前,并指向它 ++ it ; //指向原来的元素 list <int> lst ={ 1 , 2 , 3 , 4 }; list <int> lst2 , lst3 ; copy ( list . cbegin (), last . cend (), front_inserter ( lst2 )); //lst2=4,3,2,1 copy ( list . cbegin (), last . cend (), inserter ( lst3 )); //lst3=1,2,3,4 2.流迭代器:绑定到输入输出流,用于遍历 stream_iterator <int> in_iter ( cin ), eof ; vector <int> vec ( in_iter , eof ); 3.反向迭代器:向后移动(forward_list没有,流迭代器也没有) sort ( vec . begin (), vec . end ()); //正常顺序排列 sort (

c++之迭代器

匿名 (未验证) 提交于 2019-12-03 00:03:02
一、迭代器简介 二、容器的迭代器类型 vector<int> iv = {100,200,300}; vector<int>::iterator iter; // 定义迭代器 三、迭代器相关操作 //begin() end()操作一般返回迭代器类型,反向迭代器rbegin()/rend(); vector<int> iv={100,200,300}; vector<int>::iterator iter; // 定义迭代器 iter = iv.begin(); //如果容器有元素,返回的迭代器指向第一个元素 iter = iv.end(); //指向末端元素的后边,为无效数据//如果一个容器为空,则begin()和end()返回的迭代器相同,起到标记的作用。 vector<int> iv={100,200,300}; // 使用正向迭代器 for(vector<int>::iterator iter = iv.begin(); iter != iv.end(); iter++){  cout << *iter << endl; //100 200 300} // 使用反向迭代器 for(vector<int>::reverse_iterator riter = iv.rbegin(); riter != iv.rend(); riter++){  cout << *riter <<

函数进阶之迭代器,递归

匿名 (未验证) 提交于 2019-12-03 00:03:02
可迭代的对象:具有iter方法的对象,可迭代对象不一定是迭代器对象 迭代器对象:具有iter和next方法的对象,迭代器对象一定是可迭代对象,迭代器对象加上iter方法还是迭代器本身 for 循环原理 for i in lt: 把lt变成迭代器对象 然后迭代使用next方法获取每一个元素 捕捉异常中断while循环 print(1) if i > 10 else print(2) {k:v for k,v in dic.items()} (i for i in rang(10)) #不去使用next取值,是没有值的 自定制的迭代器 def func(): yield: 1.展厅函数,遇到下一个yield继续运行函数代码 2.具有返回值 3.让函数()变成生成器对象 return: 1.终止函数 2.返回值 没有名字的函数 lambda参数:代码块 一般不单独使用,与max/min/map/filter/sorted联用 函数调用函数本身,但是必须得有结束条件 内置函数的直接用的,属于Python解释器的 数据类型的内置函数只有数据类型本身才能使用 enumerate() 流水线 优点:思路清晰 缺点:可扩展性差;功能与功能直接不独立;调试麻烦 来源:博客园 作者: 十七zz 链接:https://www.cnblogs.com/shiqizz/p/11515030.html