Tag: 迭代器

RecursiveIteratorIterator如何在PHP中工作?

RecursiveIteratorIterator如何工作? PHP手册没有太多的文档或解释。 IteratorIterator和RecursiveIteratorIterator什么区别?

Java:在迭代过程中将元素添加到集合中

迭代时可以向集合中添加元素吗? 更具体地说,我想迭代一个集合,如果一个元素满足一定的条件,我想添加一些其他元素的集合,并确保这些添加的元素也迭代。 (我意识到这可能会导致一个无限循环,但我很确定这不会在我的情况。) Sun的Java教程build议这样做是不可能的:“请注意, Iterator.remove是在迭代期间修改集合的唯一安全方法;如果在迭代过程中以其他任何方式修改了底层集合,则行为是未指定的。 “ 所以如果我不能用迭代器做我想做的事情,你build议我做什么?

在迭代时从列表中移除

以下代码: a = list(range(10)) remove = False for b in a: if remove: a.remove(b) remove = not remove print(a) 当使用Python 3.2时[0, 2, 3, 5, 6, 8, 9]输出[0, 2, 3, 5, 6, 8, 9] 0,2,3,5,6,8,9 [0, 2, 3, 5, 6, 8, 9] ,而不是[0, 2, 4, 6, 8] 。 为什么它输出这些特定的值? 为什么没有错误指出底层迭代器正在被修改? 从这个行为的angular度来看,Python的早期版本有没有改变? 请注意,我并不是想要解决这个问题,而是去了解它。

如何实现一个STL风格的迭代器,并避免常见的陷阱?

我做了一个集合,我想提供一个STL风格的随机访问迭代器。 我正在寻找一个迭代器的示例实现,但我没有find任何。 我知道[]和*运算符需要const重载。 迭代器对STL风格有什么要求,还有什么其他的陷阱可以避免(如果有的话)? 额外的上下文:这是一个图书馆,我不想引入任何依赖它,除非我真的需要。 我写我自己的集合,以提供相同的编译器之间的C + + 03和C + + 11之间的二进制兼容性(所以没有STL可能会中断)。

从符合条件的迭代中获取第一个项目

我想从匹配条件的列表中获得第一个项目。 所产生的方法不能处理整个列表是非常重要的,这个列表可能非常大。 例如,以下function就足够了: def first(the_iterable, condition = lambda x: True): for i in the_iterable: if condition(i): return i 这个函数可以这样使用: >>> first(range(10)) 0 >>> first(range(10), lambda i: i > 3) 4 但是,我想不出一个好的内置/单线程来让我这样做。 我不特别想复制这个function,如果我不需要。 有没有一种内置的方式来获得匹配条件的第一个项目?

ConcurrentModificationException,尽pipe使用同步

public synchronized X getAnotherX(){ if(iterator.hasNext()){ X b = iterator.next(); String name = b.getInputFileName(); … return b; } else{return null;} } 尽pipe在声明头文件中有synchronized语句,但是我仍然在我使用iterator.next()的那一行得到一个ConcurrentModificationExceptionexception。 这里怎么了?

Python的生成器和迭代器之间的区别

迭代器和生成器有什么区别? 当你使用每个案例的一些例子将是有帮助的。

如果在从开始到结束的迭代过程中调用地图元素上的erase()会发生什么?

在下面的代码中,我通过一个映射循环,testing一个元素是否需要被擦除。 清除元素并继续迭代是否安全?还是需要将密钥收集到另一个容器中,然后执行第二个循环来调用erase()? 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); } } 更新:当然,我然后读这个问题 ,我不认为会相关,但回答我的问题。

如何避免“ConcurrentModificationException”同时从ArrayList中删除元素,而迭代呢?

我试图从ArrayList删除一些元素,而像这样迭代它: for (String str : myArrayList) { if (someCondition) { myArrayList.remove(str); } } 当然,当迭代myArrayList ConcurrentModificationException尝试从列表中删除项目时,我得到了ConcurrentModificationException 。 有没有一些简单的解决scheme来做到这一点?

为什么使用迭代器而不是数组索引?

采取以下两行代码: for (int i = 0; i < some_vector.size(); i++) { //do stuff } 和这个: for (some_iterator = some_vector.begin(); some_iterator != some_vector.end(); some_iterator++) { //do stuff } 我被告知第二种方式是首选。 为什么呢?