Questions tagged «iterator»

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

12
如何在Java中的列表上获得反向列表视图?
我想在列表上有一个反向列表视图(以与List#sublist在列表上提供子列表视图类似的方式)。是否有提供此功能的功能? 我既不想复制列表,也不想修改列表。 在这种情况下,如果我至少可以在列表上获得一个反向迭代器就足够了。 另外,我知道自己如何实施。我只是问Java是否已经提供了类似的东西。 演示实现: static <T> Iterable<T> iterableReverseList(final List<T> l) { return new Iterable<T>() { public Iterator<T> iterator() { return new Iterator<T>() { ListIterator<T> listIter = l.listIterator(l.size()); public boolean hasNext() { return listIter.hasPrevious(); } public T next() { return listIter.previous(); } public void remove() { listIter.remove(); } }; } …

7
如何从生成器中仅选择一项(在python中)?
我有一个类似下面的生成器函数: def myfunct(): ... yield result 调用此函数的常用方法是: for r in myfunct(): dostuff(r) 我的问题是,有什么方法可以随时从生成器中获取一个元素吗?例如,我想做类似的事情: while True: ... if something: my_element = pick_just_one_element(myfunct()) dostuff(my_element) ...


5
C ++ STL向量:从索引获取迭代器?
因此,我编写了一堆代码通过index []访问stl向量中的元素,但是现在我只需要复制向量的一部分即可。看起来vector.insert(pos, first, last)是我想要的功能...除了我只有第一个和最后一个作为整数。有什么好方法可以让我迭代这些值?
200 c++  stl  vector  iterator 

7
为什么在C ++ 11中使用非成员的begin和end函数?
每个标准容器都有一个beginand end方法,用于返回该容器的迭代器。但是,C ++ 11显然引入了称为std::begin和的自由函数,std::end它们调用begin和end成员函数。所以,不用写 auto i = v.begin(); auto e = v.end(); 你会写 auto i = std::begin(v); auto e = std::end(v); Herb Sutter 在他的写现代C ++的演讲中说,当您想要容器的开始或结束迭代器时,应该始终使用自由函数。但是,他没有详细说明您为什么要这么做。查看代码,可以节省一个字符。因此,就标准容器而言,自由功能似乎完全没有用。赫伯·萨特(Herb Sutter)表示,使用非标准容器也有好处,但是他没有详细介绍。 那么,问题到底是什么做的免费功能的版本std::begin,并std::end做超出调用它们相应的成员函数的版本,你为什么要使用它们?




16
为什么Java的Iterator不可迭代?
为什么Iterator接口不扩展Iterable? 该iterator()方法可以简单地返回this。 是故意的还是对Java设计人员的监督? 能够将for-each循环与这样的迭代器一起使用会很方便: for(Object o : someContainer.listSomeObjects()) { .... } 其中listSomeObjects()返回迭代器。
178 java  iterator  iterable 


2
iterator-> second是什么意思?
在C ++中,a的类型是std::map<>::iterator什么? 我们知道it类型的对象std::map<A,B>::iterator有一个重载operator ->,它返回a std::pair<A,B>*,并且std::pair<>有一个firstand second成员。 但是,这两个成员对应什么,为什么我们必须以as的形式访问映射中存储的值it->second?
157 c++  stl  iterator 


8
迭代时从std :: set中删除元素
我需要遍历一组并删除符合预定义条件的元素。 这是我编写的测试代码: #include <set> #include <algorithm> void printElement(int value) { std::cout << value << " "; } int main() { int initNum[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; std::set<int> numbers(initNum, initNum + 10); // print '0 1 2 3 4 5 6 7 …

6
Python列表迭代器行为和next(iterator)
考虑: >>> lst = iter([1,2,3]) >>> next(lst) 1 >>> next(lst) 2 因此,按预期方式,通过更改同一对象来处理迭代器。 在这种情况下,我希望: a = iter(list(range(10))) for i in a: print(i) next(a) 跳过每第二个元素:对的调用next应使迭代器前进一次,然后循环进行的隐式调用应使它第二次前进-并将第二次调用的结果分配给i。 没有。该循环将打印列表中的所有项目,而不会跳过任何项目。 我的第一个想法是,可能会发生这种情况,因为循环会调用iter它所传递的内容,并且这可能会提供一个独立的迭代器-事实并非如此iter(a) is a。 那么,为什么next在这种情况下似乎不推进迭代器呢?

6
创建我自己的迭代器
我正在尝试学习C ++,所以如果这个问题表明缺乏基础知识,请原谅我,事实是,我缺乏基础知识。 我需要一些帮助,以了解如何为自己创建的类创建迭代器。 我有一个“形状”类,其中包含点容器。我有一个“ Piece”类,它引用Shape并定义Shape的位置。零件没有形状,它仅引用形状。 我希望它看起来像Piece是一个点的容器,这些容器与它引用的Shape相同,但是增加了Piece位置的偏移量。 我希望能够遍历Piece的点,就好像Piece本身是一个容器一样。我已经读了一些书,却没有发现任何对我有帮助的东西。我将不胜感激任何指针。
141 c++  iterator 

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.