Questions tagged «iterator»

迭代器是一种面向对象的编程模式,它允许遍历整个集合,而与物理内存中的实际实现或对象地址无关。它是“四人帮”的行为设计模式之一。


4
与python列表混淆:它们是迭代器还是不是迭代器?
我正在研究Alex Marteli的《 Nutshell》中的Python,该书建议具有next()方法的任何对象都是(或至少可以用作)迭代器。它还建议大多数迭代器是通过对称为的方法的隐式或显式调用构建的iter。 阅读本书中的内容后,我感到有尝试的渴望。我启动了python 2.7.3解释器并执行以下操作: >>> x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> for number in range(0, 10): ... print x.next() 但是结果是这样的: Traceback (most recent call last): File "<stdin>", line 2, in <module> AttributeError: 'list' object has no attribute 'next' 在混乱中,我尝试通过研究x对象的结构,dir(x)并发现它具有一个__iter__功能对象。因此,我弄清楚了它可以用作迭代器,只要它支持该类型的接口即可。 因此,当我再次尝试时,这次稍有不同,尝试这样做: >>> _temp_iter …
78 python  list  iterator 

6
地图操作中的元组拆箱
我经常发现自己正在使用元组的列表,序列和迭代器,并且希望执行以下操作, val arrayOfTuples = List((1, "Two"), (3, "Four")) arrayOfTuples.map { (e1: Int, e2: String) => e1.toString + e2 } 但是,编译器似乎从未同意这种语法。相反,我最终写了, arrayOfTuples.map { t => val e1 = t._1 val e2 = t._2 e1.toString + e2 } 真是愚蠢。我该如何解决?

9
迭代器与枚举器之间的区别
.NET 3.5作业的面试问题是“迭代器和枚举器有什么区别”? 这是要做出的核心区分,对于LINQ等等。 无论如何,有什么区别?我似乎在网上找不到可靠的定义。没错,我可以找到两个术语的含义,但是得到的答案略有不同。面试的最佳答案是什么? IMO迭代器在集合上“迭代”,并且枚举器提供了迭代功能,但这必须调用。 另外,据说使用yield关键字可以保存状态。这个状态到底是什么?有这种好处发生的例子吗?


2
不推荐使用std :: iterator的准备
3月21日,标准委员会投票通过了弃用P0174中std::iterator提议的建议: 与读者typedef在类定义本身中简单地提供期望的s相比,冗长的void参数序列对读者而言并不十分清楚,这是当前工作草案采用的方法,遵循的c + + 14 之前 C ++ 17std::iterator鼓励从继承继承,以从迭代器样板实现中删除乏味。但是弃用将需要以下其中一项: 迭代器样板现在将需要包含所有必需的typedefs 使用迭代器的算法现在将需要使用auto而不是依赖迭代器来声明类型 Loki Astari建议在std::iterator_traits不继承的情况下进行更新以使其正常工作std::iterator 在设计自定义迭代器时,有人可以启发我应该选择哪些选项吗? C ++ 17 兼容性?

6
迭代器与
在一次采访中有人问我,使用迭代器而不是for循环的优点是for什么? 有人可以回答吗?

6
为什么Python中没有第一个(可迭代的)内置函数?
我想知道是否有某种原因,first(iterable)Python内置函数中没有这个原因,它与any(iterable)和相似all(iterable)(它可能藏在stdlib模块中的某个地方,但我看不到itertools)。first将执行短路发生器评估,以便避免不必要的操作(以及可能无限次数的操作);即 def identity(item): return item def first(iterable, predicate=identity): for item in iterable: if predicate(item): return item raise ValueError('No satisfactory value found') 这样,您可以表达以下内容: denominators = (2, 3, 4, 5) lcd = first(i for i in itertools.count(1) if all(i % denominators == 0 for denominator in denominators)) 显然,list(generator)[0]在这种情况下您无法执行此操作,因为生成器不会终止。 或者,如果您有一堆要匹配的正则表达式(当它们都具有相同的groupdict接口时很有用): match = first(regex.match(big_text) …

10
矢量擦除迭代器
我有这个代码: int main() { vector<int> res; res.push_back(1); vector<int>::iterator it = res.begin(); for( ; it != res.end(); it++) { it = res.erase(it); //if(it == res.end()) // return 0; } } “一个随机访问迭代器,指向在函数调用删除的最后一个元素之后的元素的新位置,如果操作删除了序列中的最后一个元素,则该向量为向量结束。” 此代码崩溃,但是如果我使用该if(it == res.end())部分然后返回,则可以正常工作。怎么来的?for循环是否缓存,res.end()以便不等于运算符失败?
75 c++  vector  iterator 


6
计算生成器/迭代器中项目数的最短方法是什么?
如果我希望迭代中的项目数量而不关心元素本身,那么实现该目标的Python方法是什么?现在,我将定义 def ilen(it): return sum(itertools.imap(lambda _: 1, it)) # or just map in Python 3 但我知道自己lambda几乎被认为是有害的,而且lambda _: 1肯定不是很漂亮。 (这种情况的用例是计算文本文件中与regex相匹配的行数,即grep -c。)

3
如何使用迭代器?
我正在尝试计算两点之间的距离。我在C ++中将两个点存储在向量中:(0,0)和(1,1)。 我应该得到结果 0 1.4 1.4 0 但是我得到的实际结果是 0 1 -1 0 我认为在向量中使用迭代器的方式存在问题。我该如何解决这个问题? 我在下面发布了代码。 typedef struct point { float x; float y; } point; float distance(point *p1, point *p2) { return sqrt((p1->x - p2->x)*(p1->x - p2->x) + (p1->y - p2->y)*(p1->y - p2->y)); } int main() { vector <point> po; point …

1
为什么下一个为什么会引发“ StopIteration”,而“ for”却会正常返回?
在这段代码中,为什么使用for结果为noStopIteration 或for循环捕获所有异常然后静默退出?在这种情况下,为什么会有多余的return?还是由以下 raise StopIteration原因引起的return None? #!/usr/bin/python3.1 def countdown(n): print("counting down") while n >= 9: yield n n -= 1 return for x in countdown(10): print(x) c = countdown(10) next(c) next(c) next(c) 假设StopIteration由触发return None。什么时候GeneratorExit产生的? def countdown(n): print("Counting down from %d" % n) try: while n > 0: yield n n = …


3
如何编写一个带迭代器的Rust函数?
我想编写一个接受迭代器并返回一些操作结果的函数。具体来说,我正在尝试迭代a的值HashMap: use std::collections::HashMap; fn find_min<'a>(vals: Iterator<Item=&'a u32>) -> Option<&'a u32> { vals.min() } fn main() { let mut map = HashMap::new(); map.insert("zero", 0u32); map.insert("one", 1u32); println!("Min value {:?}", find_min(map.values())); } 可惜: error: the `min` method cannot be invoked on a trait object --> src/main.rs:4:10 | 4 | vals.min() | ^^^ …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.