在我的应用程序中,我需要数组1的给定大小k的所有子集。。n
这可以使用递归方法轻松完成,并存储沿途找到的所有子集。然而,我不希望我的应用程序使用指数级的内存量[O(n^k)]。
因此,我想编写一个实现(Java)Iterator
的类来迭代所述子集。
public class SubsetIterator implements Iterator<int[]> {
private int k;
private int[] array;
public SubsetIterator(int k, int[] array) {
this.k = k;
this.array = array;
}
@Override
public boolean hasNext() {
//To be implemented.
}
@Override
public int[] next() {
//To be implemented.
}
}
所以我可以如下使用它:
SubsetIterator iter = new SubsetIterator(k, array);
while (iter.hasNext) {
int[] next = iter.next();
//Do stuff
}
显然,我们需要存储Next()
最后返回的当前子集,它被初始化为1... k。但是如何从这个当前子集计算下一个子集呢?
我认为您应该使用存储所有子集的方法,如果这对您的用例是可能的。否则,每次使用迭代器时,您将分配相同数量的内存,这将使GC非常努力地工作。
如果没有以下内容,我如何迭代/?
迭代器 乍看来,迭代器似乎很直观。但凑近了看,你会发现标准STL容器提供了四种不同的迭代器:iterator、const_iterator、reverse_iterator和const_reverse_iterator。很快你会注意到在这四种类型中,容器的insert和erase的某些形式只接受其中一种。那是问题的开始。为什么有四种迭代器?它们之间的关系是什么?它们可以互相转化吗?在调用算法和ST
For freedom Christ has set us free. Stand firm, therefore, and do not submit again to a yoke of slavery. 基督释放了我们,叫我们得以自由,所以要站立得稳,不要再被奴仆的轭挟制。(GALATIANS 5:1) 迭代器 迭代,对于读者已经不陌生了,曾有专门一节来讲述,如果印象不深,请复习《迭代》。
在Rust中,迭代器共分为三个部分:迭代器、适配器、消费者。 其中,迭代器本身提供了一个惰性的序列,适配器对这个序列进行诸如筛选、拼接、转换查找等操作,消费者则在前两者的基础上生成最后的数值集合。 但是,孤立的看这三者其实是没有意义的,因此,本章将在一个大节里联系写出三者。 迭代器、适配器、消费者
正如我们之前学到的,在Python中我们可以使用“for”循环来迭代出对象中的内容: >>> for value in [0, 1, 2, 3, 4, 5]: ... print(value) ... 0 1 4 9 16 25 可以使用“for”循环(迭代)的对象称为迭代器。因此,一个迭代器也就是一个遵循了迭代协议的对象。 内置函数“iter”可以用来创建一个迭代对象,这时使用“next”函数
我们已经知道,可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list、tuple、dict、set、str等; 一类是generator,包括生成器和带yield的generator function。 这些可以直接作用于for循环的对象统称为可迭代对象:Iterable。 可以使用isinstance()判断一个对象是否是Iterable对象: >>> from coll