Questions tagged «iterator»

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

11
使用“ for”循环遍历C ++ Vector
我是C ++语言的新手。我已经开始使用向量,并且注意到在我看到的所有代码中都通过索引迭代向量,for循环的第一个参数始终是基于向量的。在Java中,我可以使用ArrayList做类似的事情: for(int i=0; i < vector.size(); i++){ vector[i].doSomething(); } 有没有我在C ++中看不到的原因?这是不好的做法吗?

5
遍历node.js中的对象键
从Javascript 1.7开始,有一个Iterator对象,它允许这样做: var a={a:1,b:2,c:3}; var it=Iterator(a); function iterate(){ try { console.log(it.next()); setTimeout(iterate,1000); }catch (err if err instanceof StopIteration) { console.log("End of record.\n"); } catch (err) { console.log("Unknown error: " + err.description + "\n"); } } iterate(); node.js中是否有类似的东西? 现在我正在使用: function Iterator(o){ /*var k=[]; for(var i in o){ k.push(i); }*/ var k=Object.keys(o); …


3
迭代器和Listiterator之间的区别?
Iterator ite = Set.iterator(); Iterator ite = List.iterator(); ListIterator listite = List.listIterator(); 我们可以使用Iterator遍历a Set或a List或a Map。但是ListIterator只能用于遍历a List,不能遍历a Set。为什么? 我知道主要的区别在于,使用迭代器,我们只能在一个方向上运行,而ListIterator我们可以在两个方向上运行。还有其他区别吗?和任何优势ListIterator了Iterator?


12
遍历Typescript映射
我试图遍历一个打字稿图,但是我不断收到错误,并且对于这种琐碎的问题我找不到任何解决方案。 我的代码是: myMap : Map<string, boolean>; for(let key of myMap.keys()) { console.log(key); } 我得到了错误: 类型'IterableIteratorShim <[string,boolean]>'不是数组类型或字符串类型。 全栈跟踪: Error: Typescript found the following errors: /home/project/tmp/broccoli_type_script_compiler-input_base_path-q4GtzHgb.tmp/0/src/app/project/project-data.service.ts (21, 20): Type 'IterableIteratorShim<[string, boolean]>' is not an array type or a string type. at BroccoliTypeScriptCompiler._doIncrementalBuild (/home/project/node_modules/angular-cli/lib/broccoli/broccoli-typescript.js:115:19) at BroccoliTypeScriptCompiler.build (/home/project/node_modules/angular-cli/lib/broccoli/broccoli-typescript.js:43:10) at /home/project/node_modules/broccoli-caching-writer/index.js:152:21 at lib$rsvp$$internal$$tryCatch (/home/project/node_modules/rsvp/dist/rsvp.js:1036:16) at …

3
如果在从头到尾迭代时在map元素上调用Erase()会发生什么?
在下面的代码中,我遍历了一个映射并测试是否需要删除一个元素。擦除元素并保持迭代是安全的吗,还是我需要将密钥收集到另一个容器中并进行第二次循环来调用delete()? map<string, SerialdMsg::SerialFunction_t>::iterator pm_it; for (pm_it = port_map.begin(); pm_it != port_map.end(); pm_it++) { if (pm_it->second == delete_this_id) { port_map.erase(pm_it->first); } } 更新:当然,我然后阅读了我认为不相关的问题,但回答了我的问题。
133 c++  stl  iterator 


7
一次迭代两个数组的“ Ruby方法”是什么
语法上的好奇心比解决问题更重要... 我有两个相等长度的数组,并且想一次遍历两个数组,例如,以某个索引输出它们的两个值。 @budget = [ 100, 150, 25, 105 ] @actual = [ 120, 100, 50, 100 ] 我知道我可以each_index像这样使用和索引数组: @budget.each_index do |i| puts @budget[i] puts @actual[i] end 有Ruby的方法可以更好地做到这一点吗?什么样的? # Obviously doesn't achieve what I want it to - but is there something like this? [@budget, @actual].each do |budget, actual| puts …
127 ruby  arrays  iterator 

5
为什么遍历列表比索引索引快?
阅读有关ADT列表的Java文档时,它说: List接口提供了四种位置(索引)访问列表元素的方法。列表(如Java数组)从零开始。请注意,对于某些实现(例如,LinkedList类),这些操作可能在时间上与索引值成比例执行。因此,如果调用者不知道实现,则遍历列表中的元素通常比对其进行索引更可取。 这到底是什么意思?我不明白得出的结论。
125 java  list  iterator 


6
遍历字符串
我有这样定义的多行字符串: foo = """ this is a multi-line string. """ 我们用作我正在编写的解析器的测试输入的字符串。解析器功能接收file-object作为输入并对其进行迭代。它还确实next()直接调用该方法以跳过行,因此我确实需要一个迭代器作为输入,而不是可迭代的。我需要一个迭代器,它可以在字符串的各个行之间进行迭代,就像file-object可以在文本文件的行之间进行迭代一样。我当然可以这样: lineiterator = iter(foo.splitlines()) 是否有更直接的方法?在这种情况下,字符串必须遍历一次才能进行拆分,然后再由解析器再次遍历。在我的测试用例中,这无关紧要,因为那里的字符串很短,我只是出于好奇而问。Python有很多有用且高效的内置程序,但是我找不到适合此需求的东西。
119 python  string  iterator 

7
无限生成器有表达式吗?
是否有一个可以生成无限元素的简单生成器表达式? 这是一个纯粹的理论问题。此处无需“实用”答案:) 例如,很容易制作一个有限生成器: my_gen = (0 for i in xrange(42)) 但是,要制作一个无限个,我需要用虚假函数“污染”我的名称空间: def _my_gen(): while True: yield 0 my_gen = _my_gen() 在单独的文件中处理,import以后-ing不计算在内。 我也知道这itertools.repeat完全可以做到。我很好奇是否有没有这种情况的一线解决方案。

7
Scala向下还是向下循环?
在Scala中,您经常使用迭代器以for递增顺序执行循环,例如: for(i <- 1 to 10){ code } 您将如何处理,使其从10变为1?我猜10 to 1给定一个空的迭代器(如通常的范围数学)? 我制作了一个Scala脚本,可以通过在迭代器上调用reverse来解决该问题,但是我认为这不好,遵循以下方法吗? def nBeers(n:Int) = n match { case 0 => ("No more bottles of beer on the wall, no more bottles of beer." + "\nGo to the store and buy some more, " + "99 bottles of beer on …

9
同时迭代两个或多个容器的最佳方法是什么
C ++ 11提供了多种遍历容器的方式。例如: 基于范围的循环 for(auto c : container) fun(c) std :: for_each for_each(container.begin(),container.end(),fun) 但是,建议对两个(或更多个)相同大小的容器进行迭代以完成类似任务的方法是: for(unsigned i = 0; i < containerA.size(); ++i) { containerA[i] = containerB[i]; }

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.