标签: iterator

安全存储list :: iterator供以后使用?

假设我有一个列表,其中没有添加或删除新节点.但是,节点可能会被混乱.

保存迭代器,指向列表中的节点并在以后任意时间访问它是否安全?

编辑(后续问题):list :: splice()的文档说它从参数列表中删除了元素.这是否意味着如果我使用与函数的参数相同的列表调用splice,现有的迭代器将被无效?

c++ iterator stl list

8
推荐指数
2
解决办法
4482
查看次数

正确使用迭代器块

我之前正在重构一些代码,我遇到了一个迭代器块的实现,我不太确定.在客户端为某些数据调用extrernal API的系统的集成层中,我有一组转换器,它们从API返回的数据并将其转换为逻辑层中使用的业务实体的集合.常见的翻译类将如下所示:

// translate a collection of entities coming back from an extrernal source into business entities
public static IEnumerable<MyBusinessEnt> Translate(IEnumerable<My3rdPartyEnt> ents) {

    // for each 3rd party ent, create business ent and return collection
    return from ent in ents
           select new MyBusinessEnt {
               Id = ent.Id,
               Code = ent.Code
           };
}
Run Code Online (Sandbox Code Playgroud)

今天我遇到了以下代码.同样,它是一个翻译类,它的目的是将参数中的集合转换为方法返回类型.但是,这次它是一个迭代器块:

// same implementation of a translator but as an iterator block
public static IEnumerable<MyBusinessEnt> Translate(IEnumerable<My3rdPartyEnt> ents) {
    foreach(var ent in ents)
    {
        yield return new MyBusinessEnt { …
Run Code Online (Sandbox Code Playgroud)

.net c# iterator

8
推荐指数
1
解决办法
1251
查看次数

Scala - 迭代器和takeWhile

我正在运行以下代码:

 val it = List(1,1,1,2,2,3,3).iterator.buffered
 val compare = it.head
it.takeWhile(_ == compare).toList
Run Code Online (Sandbox Code Playgroud)

它返回(1,1,1).但是,如果我这样运行:

val it = List(1,1,1,2,2,3,3).iterator.buffered
it.takeWhile(_ == it.head).toList
Run Code Online (Sandbox Code Playgroud)

我得到(1,1).为什么会这样?是否head在通话时评估,takeWhile结果应该相同?

iterator scala

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

线程"main"java.util.ConcurrentModificationException中的异常

当我运行以下代码时,我得到一个例外.我搜索但找不到任何解决方案.

Exception in thread "main" java.util.ConcurrentModificationException
     at java.util.HashMap$HashIterator.nextEntry(Unknown Source)
     at java.util.HashMap$KeyIterator.next(Unknown Source)
     at com.aybits.software.linkgrabber.Grabber.main(Grabber.java:45)
Run Code Online (Sandbox Code Playgroud)

第45行用于(String linkFromCollection:linksList){

public class Grabber {

static String url;
Document doc;
static Set<String> linksList = new HashSet<String>();
String matchingString ="java2s.com/Code";
static boolean isCrawling = true;
static int STOP_WATCH = 0;

public Grabber(String url){
    Grabber.url = url;
}

public void grabLinks(String urlToCrawl) throws IOException{
    doc = Jsoup.connect(urlToCrawl).timeout(20 * 1000).get();
    Elements links = doc.select("a[href]");

    for (Element link : links) {
        //print(" * a: <%s>  (%s)", link.attr("abs:href"), trim(link.text(), …
Run Code Online (Sandbox Code Playgroud)

java arrays iterator hashset

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

(重新)将std :: algorithms与非标准容器一起使用

我有一个"列"容器类型:

struct MyColumnType { 
  // Data: Each row represents a member of an object.
  vector<double> a;   // All vectors are guaranteed to have always
  vector<string> b;   // the same length.
  vector<int> c;

  void copy(int from_pos, int to_pos); // The column type provides an interface
  void swap(int pos_a, int pos_b);     // for copying, swapping, ...

  void push_back();      // And for resizing the container.
  void pop_back();
  void insert(int pos);
  void remove(int pos);
  // The interface can be extended/modified if required
};
Run Code Online (Sandbox Code Playgroud)

用法: …

c++ algorithm proxy iterator

8
推荐指数
1
解决办法
1150
查看次数

java.util.List的异常行为基于其中的元素数量

我知道如果使用迭代器在某个线程遍历它时将更改Collection,则iterator.next()将抛出ConcurrentModificationException.

但它根据列表中的元素数量显示不同的行为.

我尝试了一个代码片段,在其中遍历for-each循环中的列表,在它之间,遍历使用列表的remove()方法从列表中删除了一个元素.

理想情况下,它应该在此条件下抛出ConcurrentModificationException而不依赖于列表中的元素数量,但是当列表中的元素数量为2时,它不是真的.

案例1: 列表中的元素数量 - 1

 public static void main(String[] args) 
    {
        List<String> list=new ArrayList<String>();
        list.add("One");

        for (String string : list) 
        {
            System.out.println(string);
            list.remove(string);
        }
    }
Run Code Online (Sandbox Code Playgroud)

输出:一

线程"main"java.util.ConcurrentModificationException中的异常

这是预期的.

案例2:列表中的元素数量 - 2

 public static void main(String[] args) 
    {
        List<String> list=new ArrayList<String>();
        list.add("One");
        list.add("two");

        for (String string : list) 
        {
            System.out.println(string);
            list.remove(string);
        }
    }
Run Code Online (Sandbox Code Playgroud)

输出:一

没有例外被抛出?????????

案例3:列表中的元素数量 - 3

 public static void main(String[] args) 
    {
        List<String> list=new ArrayList<String>();
        list.add("One");
        list.add("Two");
        list.add("Three");

        for (String string …
Run Code Online (Sandbox Code Playgroud)

java collections iterator list concurrentmodification

8
推荐指数
2
解决办法
292
查看次数

转到template/html迭代以从struct生成表

给定一个结构集合,如何使用"范围"模板迭代器打印出一个表,该表为每个结构分配一行,每个字段的列没有明确命名字段?

container := []Node

type Node struct {
    Contact_id        int
    Employer_id       int
    First_name        string
    Middle_name       string
    Last_name         string
}
Run Code Online (Sandbox Code Playgroud)

模板代码:

{{range .container}}

<tr>
<td>{{.Prefix}}</td>
<td>{{.First_name}}</td>
<td>{{.Middle_name}}</td>
<td>{{.Last_name}}</td>

<td>{{.Contact_id}}</td>
<td>{{.Employer_id}}</td>

</tr>
{{end}}
Run Code Online (Sandbox Code Playgroud)

当我尝试使用迭代值时

{{range .container}}
 {{range .}}
 <td>{{.}}</td> 
{{end}}
{{end}}
Run Code Online (Sandbox Code Playgroud)

有人告诉我,我无法迭代价值观.有没有干净的方法来做到这一点?

html reflection templates iterator go

8
推荐指数
1
解决办法
8480
查看次数

为什么我不能减少std :: array :: end()?

我正在display()为容器类型创建一个方便的函数模板.最后一个元素的输出与其余元素不同,因此我检查何时myIterator != --cont.cend();.这适用于std::vector,但不适用std::array.为什么?

这是一个MWE(不是我的实际代码):

std::vector<double> vec({1,2});
std::array<double, 2> arr({{1,2}});
auto vecIt = --vec.end(); // OK
auto arrIt = --arr.end(); // error: lvalue required as decrement operand
Run Code Online (Sandbox Code Playgroud)

c++ iterator language-lawyer stdarray

8
推荐指数
3
解决办法
495
查看次数

map函数在3.X中运行到无限循环

我目前正在研究python中的迭代.

我遇到了以下代码.

def myzip(*args):
    iters = map(iter, args)
    while iters:
        res = [next(i) for i in iters]
        print(res)
        yield tuple(res)

list(myzip('abc', '1mnop'))
Run Code Online (Sandbox Code Playgroud)

当我在3.X中运行代码时,代码会进入无限循环并打印

['a', '1']
[]
[]
[]
...
Run Code Online (Sandbox Code Playgroud)

我从作者那里得到的解释是

3.X map返回一次性可迭代对象而不是2.X中的列表.在3.X中,只要我们在循环中运行一次列表理解,它就会耗尽,但仍然是真的(并且res将永远是[]).

但我仍在努力了解正在发生的事情及其发生的原因.

而且,为什么变量res('a', 'l')while循环的第一次迭代中赋值?为什么没有分配('b', 'm'),然后('c', 'n')在第二次和第三次迭代?

python dictionary iterator

8
推荐指数
1
解决办法
355
查看次数

输入迭代器只能在赋值的右手符号上取消引用吗?

我有一个简单的问题:在Lippman第10章的C ++入门5中。它说:“迭代器类别”:

迭代器类别

输入迭代器:可以读取序列中的元素。输入迭代器必须提供

  • 相等和不相等运算符(==!=)比较两个迭代器

  • 前缀和后缀增量(++)推进迭代器

  • 解引用运算符(*)以读取元素;取消引用可能仅出现在作业的右侧

  • 箭头运算符(->)是—的同义词,(*it).member即取消引用迭代器并从基础对象中获取成员。

他的意思是“去引用运算符(*)以读取元素;去引用只能出现在作业的右侧”:在“作业的左侧”。

我对此感到困惑。谢谢。

c++ iterator

8
推荐指数
1
解决办法
135
查看次数