标签: iterator

如果在同一个集合上调用两次相同的迭代器会发生什么?

如果我为myList设置了一个迭代器:

Iterator iter = myList.iterator();
while(iter.hasNext())
{
    MyObj myObj = (MyObj)iter.next();
    doPrint(myObj.toString());
}
Run Code Online (Sandbox Code Playgroud)

我称之为第二次:

while(iter.hasNext())
{
    MyObj myObj = (MyObj)iter.next();
    doPrint(myObj.toString());
}
Run Code Online (Sandbox Code Playgroud)

我第二次打电话给它时会回到收藏的开头吗?

java collections iterator arraylist

9
推荐指数
2
解决办法
9236
查看次数

是否有类似于C++的restrict关键字,表明_iterators_没有别名

g ++确实__restrict__为指针实现,但我找不到任何关于迭代器的东西.我的总体意图是鼓励编译器对stl循环进行矢量化.

编辑:

即使编译器无法进行向量化,__restrict__关键字也应该能够告诉编译器在循环内不需要不必要的重新加载.

c++ iterator pointer-aliasing

9
推荐指数
1
解决办法
951
查看次数

将字符串拆分为2个字母的段

我有一个字符串,我需要分成2个字母的部分.例如,'ABCDXY'应该成为['AB', 'CD', 'XY'].在奇数个字符的情况下的行为可以完全是任意的(我将提前检查长度).

没有丑陋的循环有没有办法做到这一点?

python string iterator python-3.x

9
推荐指数
2
解决办法
1万
查看次数

在PHP中评估类似MongoDB的JSON查询

考虑在此JSON对象中表达的以下(相当复杂的)查询:

{
    "name": "Kindle Fire",
    "sale": true,
    "price": {
        "$gt": 199,
        "$lt": 264
    },
    "price.vat": { // bogus, just to show $a['price.vat'] == $a['price']['vat']
        "$lte": 1.2
    },
    "$or": {
        "qty": {
            "$gt": 30
        },
        "eta": {
            "$or": {
                "$lt": 3,
                "$gt": 30
            }
        }
    },
    "countriesAvailable": {
        "$in": [
            "US",
            "CA"
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

目的


我想解析那个JSON,以便它计算到PHP的等价物($a我的目标数据在哪里):

$a['name'] == 'Kindle Fire' &&
$a['sale'] == true &&
(
    $a['price'] > 199 && $a['price'] < 264
) &&
$a['price']['vat'] <= 1.2 …
Run Code Online (Sandbox Code Playgroud)

php arrays evaluation iterator multidimensional-array

9
推荐指数
1
解决办法
823
查看次数

为什么这段代码不会导致ConcurrentModificationException?

我正在阅读有关ConcurrentModificationException以及如何避免它的内容.找到一篇文章.该文章中的第一个列表的代码类似于以下内容,这显然会导致异常:

List<String> myList = new ArrayList<String>();
myList.add("January");
myList.add("February");
myList.add("March");

Iterator<String> it = myList.iterator();
while(it.hasNext())
{
    String item = it.next();
    if("February".equals(item))
    {
        myList.remove(item);
    }
}

for (String item : myList)
{
    System.out.println(item);
}
Run Code Online (Sandbox Code Playgroud)

然后它继续解释如何用各种建议解决问题.

当我试图重现它时,我没有得到例外!为什么我没有得到例外?

java iterator concurrentmodification

9
推荐指数
2
解决办法
1390
查看次数

为什么java Iterator接口应该实现为内部类?

我最近读了一本书"The Java Tutorials"第3版.它如图所示讨论了内部类的实现.

在第3段中,它说"Stack类本身不应该实现Iterator接口,因为......".

我找不到Stack类不应该实现Iterator的任何原因.给出的理由不是透彻的.

你能解释一下吗?

内心阶级 内心阶级

java iterator inner-classes

9
推荐指数
1
解决办法
6862
查看次数

如何在Scala中使用带有Iterator的takeWhile

我有一个元素的迭代器,我想消耗它们,直到下一个元素满足条件,如:

val it = List(1,1,1,1,2,2,2).iterator
val res1 = it.takeWhile( _ == 1).toList
val res2 = it.takeWhile(_ == 2).toList
Run Code Online (Sandbox Code Playgroud)

res1给出一个预期List(1,1,1,1)res2返回,List(2,2)因为迭代器必须检查位置4中的元素.

我知道列表将被订购,所以没有必要像遍历那样遍历整个列表partition.我希望在条件不满足时立即完成.是否有任何聪明的方法与迭代器一起做这个?我不能toList对迭代器做一个因为它来自一个非常大的文件.

iteration iterator scala

9
推荐指数
2
解决办法
7918
查看次数

Javascript(ES6)可迭代流

是否有使用ES6生成器使流可迭代的模式?

请参阅下面的"MakeStreamIterable".

import {createReadStream} from 'fs'

let fileName = 'largeFile.txt'
let readStream = createReadStream(fileName, {
  encoding: 'utf8',
  bufferSize: 1024
})
let myIterableAsyncStream = MakeStreamIterable(readStream)

for (let data of myIterableAsyncStream) {
  let str = data.toString('utf8')
  console.log(str)
}
Run Code Online (Sandbox Code Playgroud)

我对co或bluebird的协程deasync阻塞不感兴趣.

黄金是MakeStreamIterable应该是一个有效的函数.

javascript iterator stream ecmascript-6

9
推荐指数
2
解决办法
2791
查看次数

反向迭代&vec与vec.iter()

这工作,因为Iterator工具rev(),其中selfDoubleEndedIterator:

let vec: Vec<i32> = Vec::new();
for x in vec.iter().rev() {
    //Do stuff
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我改变vec.iter().rev()&vec.rev()它不会因为编译:

no method named `rev` found for type `std::vec::Vec<i32>` in the current scope
Run Code Online (Sandbox Code Playgroud)

此外:

the method `rev` exists but the following trait bounds were not satisfied: `std::vec::Vec<i32> : std::iter::Iterator`, `[i32] : std::iter::Iterator`
Run Code Online (Sandbox Code Playgroud)

但是for循环不会隐式调用IntoIterator吗?是&vec或被vec.iter()认为是惯用的Rust?

iterator rust

9
推荐指数
2
解决办法
3821
查看次数

迭代器或reverse_iterator的一个变量?

我想std::vector在for循环中迭代一些s,但是根据某些条件,向量应该向前或向后迭代.我想,我可以通过使用普通迭代器或反向迭代器来轻松实现,如下所示:

#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<int> vec{0, 1, 2, 3, 5, 6, 7};
    bool reverse = true;
    std::iterator<random_access_iterator_tag, int> it, end_it;

    if (reverse) {
      it = vec.rbegin();
      end_it = vec.rend();
    } else {
      it = vec.begin();
      end_it = vec.end();
    }

    for (; it != end_it; it++) {
        cout << *it << ", ";
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但不幸的是vector::begin(),vector::rbegin()似乎并没有使用相同的父类.是否有另一种方法可以做我想要的,而不在if-else结构中有两个不同的循环?当然我可以为循环体创建一个函数/ lambda或者使用一些索引算法但是有更优雅的方法吗?

编译器抱怨分配,it = vec.begin()因为它们是不同的类型.gcc和VC++输出不同的错误,似乎使用不同的类型作为返回值vector::begin.

c++ iterator for-loop stdvector reverse-iterator

9
推荐指数
0
解决办法
444
查看次数