标签: iterator

从列表中删除后,为什么迭代器指向的数据会保留

在此示例程序中,为什么即使在列表为空之后,迭代器指向的数据的值也会保留?
由于在C++中实现迭代器(即对象的值保存在迭代器中),是否会发生某种情况,或者是因为内存段被声明为免费使用,但尚未更改?

#include <iostream>
#include <list>
using namespace std;
int main ()
{
    list<int> mylist;
    list<int>::iterator it = mylist.begin();
    cout << "printing: " << *it << endl;

    mylist.push_back(77);
    mylist.push_back(22);

    // now front equals 77, and back 22

    mylist.front() -= mylist.back();
    it = mylist.begin();
    cout << "printing: " << *it << endl;
    cout << "mylist.front() is now " << mylist.front() << '\n';
    // trying to delete all elements and then see how the iterators are handling it
    it = …
Run Code Online (Sandbox Code Playgroud)

c++ iterator list

0
推荐指数
1
解决办法
79
查看次数

使用std :: vector :: erase和const_iterators

我有一个返回的函数vector<string>::const_iterator.当我尝试使用此返回值作为参数vector<string>::erase,我得到一个错误之间的转换const_iteratoriterator是不可能的.有没有办法在不改变函数的返回值类型的情况下绕过这个问题?谢谢!

c++ iterator vector c++11

0
推荐指数
1
解决办法
109
查看次数

C++中的抽象迭代器类

在编写AVL树类之后,我想为树编写3种迭代器:preOrder,inOrder,postOrder.我认为一种非常合理的方法是通过抽象类迭代器来实现,因此3个迭代器类就是从它中获得的.但是当我想编写postfix ++运算符的声明时出现问题.我想在一些选项中:1.iterator&operator ++(int)问题:postfix迭代器无法返回引用对象.2.迭代器运算符++(int)问题:类迭代器是抽象的,因此不能按值返回.

那么这样做的正确方法是什么?谢谢

c++ iterator abstract

0
推荐指数
1
解决办法
369
查看次数

如何使用Scala subiterators"it filter p"

在Scala doc中,trait Iterator中的Operation具有Subiterators部分.你怎么用它们?

例如,it filter p描述为"迭代器返回it满足条件的所有元素p.

scala> val list1 = List(1,2,3,4,5,6)
list1: List[Int] = List(1, 2, 3, 4, 5, 6)

scala> list1 filter (_ > 3)
res17: List[Int] = List(4, 5, 6)

scala> list1.filter(_ > 3)
res18: List[Int] = List(4, 5, 6)
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,您可以使用list.filter(condition)或者list filter (condition) 有人可以提供更多使用这些操作的示例,并解释两种语法格式之间的区别.

iterator scala list

0
推荐指数
1
解决办法
45
查看次数

在迭代时zip和izip之间是否有任何功能差异?

我有一个如下代码:

for v1, v2 in zip(iter1, iter2):
   print len(v1) # prints 0
Run Code Online (Sandbox Code Playgroud)

但是当我将zip更改为itertools.izip时,它会打印1

for v1, v2 in izip(iter1, iter2):
   print len(v1) # prints 1
Run Code Online (Sandbox Code Playgroud)

其他每个代码都是一样的.我只是用izip替换zip并且它有效.izip的输出是正确的.

编辑:添加整个代码:

#!/bin/python

"""
How to use:
>>> from color_assign import Bag, assign_colors
>>> from pprint import pprint
>>> old_topics = set([
... Bag(name='T1', group=0, color=1, count=16000),
... Bag(name='T2', group=0, color=1, count=16000),
... Bag(name='T3', group=1, color=2, count=16000),
... Bag(name='T4', group=2, color=3, count=16000),
... ])
>>> new_topics = set([
... Bag(name='T1', group=0, color=None, count=16000),
... Bag(name='T2', group=4, …
Run Code Online (Sandbox Code Playgroud)

python iterator

0
推荐指数
1
解决办法
2336
查看次数

如何迭代一个hashmap,是否需要在Java中强制转换keySet()?

我有一个关于迭代一个hashmap的问题:

Map<String, Integer> map = new HashMap<String, Integer>();
Run Code Online (Sandbox Code Playgroud)

我想迭代这个hashmap并使用以下代码打印输出键和值对:

Iterator iterator = portMap.keySet().iterator();
Run Code Online (Sandbox Code Playgroud)

但它表明我要转换portMap.keySet().iterator();(Iterator)portMap.keySet().iterator();但是iterator()作为迭代器已经返回,为什么我需要转换它?我检查了一些其他代码,没有演员的返回值iterator(),原因是什么,以及如何修复它?

java iterator hashmap map

0
推荐指数
1
解决办法
745
查看次数

如何迭代对象的arraylist以查找指定的对象

我无法理解并使我的程序的这个功能起作用.我正在创建一个库,我首先将多个对象输入到数组列表中.对象包括媒体的标题和格式.我需要能够搜索我的数组列表中的对象来查找特定对象并将该对象标记为"签出".我一直在研究迭代器,并试图了解如何让它们在对象中找到指定的标题,但我遇到了麻烦.当我尝试println(it.next())时,我得到MediaItem @ 3c4568f8; 所以我知道返回正确的信息格式存在问题.任何有关如何搜索我的项目数组列表中的对象的帮助将不胜感激.

import java.util.Iterator;
import java.util.Scanner;
import java.util.ArrayList;

public class Library {

    static ArrayList<MediaItem> items = new ArrayList<MediaItem>();
    static int menuOption;
    static Scanner scan = new Scanner(System.in);

    public static void main(String args[]) {
        String title, format, loanedTo, dateLoaned;
        boolean right = false;

        do {
            displayMenu();
            if (menuOption == 1) {
                System.out.println("Enter Title: ");
                title = scan.next();
                System.out.println("Enter format: ");
                format = scan.next();
                addNewItem(title, format);
            } else if (menuOption == 2) {
                System.out.println("Enter the item title");
                title = scan.next(); …
Run Code Online (Sandbox Code Playgroud)

java iterator arraylist object

0
推荐指数
1
解决办法
358
查看次数

在Java中覆盖Iterables <Obj>的正确方法

这是我为实现链表而编写的代码,

private class DequeIterator<Item> implements Iterable<Item> {
    private Node pElement;

    DequeIterator() {
        pElement = first;
    }

    public boolean hasNext() {
        return pElement != null;
    }

    public Item next() {
        if (!this.hasNext()) {
            throw new NoSuchElementException();
        }
        Item ret = pElement.it;
        pElement = pElement.next;
        return ret;
    }

    public void remove() {
        throw new UnsupportedOperationException();
    }
}
Run Code Online (Sandbox Code Playgroud)

我不知道出了什么问题我得到了以下错误,请帮我解决这些问题

=> Deque.java:25:错误:Deque.DequeIterator不是抽象的,并且不会覆盖Iterable中的抽象方法iterator()

=> Deque.java:35:错误:不兼容的类型Item ret = pElement.it; ^必需:项目#2找到:项目#1

=> Deque.java:121:错误:不兼容的类型返回new DequeIterator(); ^ required:Iterator发现:Deque.DequeIterator

java iterator linked-list

0
推荐指数
1
解决办法
2222
查看次数

如果在迭代时修改集合而不抛出ConcurrentModificationException,会发生什么

众所周知,我们不能在迭代它时修改非线程安全的集合,因为它会抛出一个ConcurrentModificationException

但我想知道的是,如果它不会抛出异常并让迭代和修改同时发生会发生什么.

例如,在迭代时从HashMap中删除一个元素.

  1. 去掉.由于删除操作不会改变HashMap中底层表的长度,我认为这不是迭代的问题.

  2. 放.也许问题只发生在Put触发器调整大小()时,因为基础表将被洗牌.

我的分析是否正确?

java iterator data-structures

0
推荐指数
1
解决办法
1119
查看次数

初始化向量迭代器

我正在尝试初始化向量迭代器,以便可以在向量中搜索元素。但是,当我尝试对其进行初始化时,出现转换错误。不知道是什么问题,有帮助吗?

int solution(int K, const vector<int> &A) {
    int count=0,size,comp=0;
    //int *index;
    vector<int>::iterator index;

    size = A.size();

    for(int i=0;i<size;i++){
        comp = K-A[i];
        index = find(A.begin(),A.end(),comp);
        cout <<"index: " << *index << endl;
        if(*index + A[i] == K)
            count++;
    }
    return count;
}
Run Code Online (Sandbox Code Playgroud)

错误是候选函数(隐式副本赋值运算符)不可行:对于第一个参数类__normal_iterator,没有从'__normal_iterator'到'const __normal_iterator'的已知转换

c++ iterator vector

0
推荐指数
1
解决办法
9316
查看次数