标签: iterator

如何通过std :: map检测循环中的最后一次迭代?

我试图找出确定我是否在地图循环的最后一次迭代中的最佳方法,以便执行以下操作:

for (iter = someMap.begin(); iter != someMap.end(); ++iter) {
    bool last_iteration;
    // do something for all iterations
    if (!last_iteration) {
        // do something for all but the last iteration
    }
}
Run Code Online (Sandbox Code Playgroud)

似乎有几种方法可以做到这一点:随机访问迭代器,distance函数等.规范方法是什么?

编辑:没有地图的随机访问迭代器!

c++ maps iterator stl

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

我应该比const_iterators更喜欢迭代器吗?

最近有人提出 Scott Meyers的文章说:

  • 身高iterators超过const_iterators(PDF链接).

其他人评论说这篇文章可能已经过时了.我想知道你的意见是什么?

这是我的:文章的一个要点是你不能删除或插入const_iterator,但我认为用它作为反对的论据很有趣const_iterators.我认为它的全部意义const_iterators在于你根本不修改范围,也不是通过插入或删除来替换它们的值或范围.或者我错过了什么?

c++ iterator stl const-iterator

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

在Python中读取.csv而不循环遍历整个文件?

我看过使用Python的csv.reader的唯一方法是在for循环中,它遍历整个文件而不保存读取变量的过去值.我只需要一次处理(巨大的)文件的2个连续行.使用csv.reader for循环,我一次只有1行.

有没有办法使用Python的csv模块只接收一行csv文件而不必完成文件的读取?

我需要将变量设置为第一行中的值,将第二组变量设置为下一行的值,同时使用两组变量进行计算,然后使用第二组覆盖第一组变量,并且读取新行以覆盖第二组.

python csv iterator next

27
推荐指数
3
解决办法
4万
查看次数

同时提供两个列表内容的迭代器?

假设我有这个:

public class Unit<MobileSuit, Pilot> {

    ...

    List<MobileSuit> mobileSuits;
    List<Pilot> pilots;

    ...
}
Run Code Online (Sandbox Code Playgroud)

我想以最简单的方式在该类之外迭代这对中的每一对.我应该怎么做呢?我想过这样做:

public class Unit<MobileSuit, Pilot> {

    ...
    Iterator<MobileSuit> iteratinMechas;
    Iterator<Pilot> iteratinPeople;

    class IteratorCustom<MobileSuit, Pilot> implements Iterator {

        public boolean hasNext() {
            return iteratinMechas.hasNext() && iteratinPeople.hasNext();
        }

        public void remove() {
            iteratinMechas.remove();
            iteratinPeople.remove();
        }

        public Object next() {
            // /!\
        }

    }

    public Iterator iterator() {
        return new IteratorCustom<MobileSuit, Pilot>(mobileSuits, pilots);
    }
}
Run Code Online (Sandbox Code Playgroud)

沿着那条线的东西.

无论如何,问题是我不能真正从next()返回一个对象,而且我也不能让Iterator占用多个类型.那么,有什么想法吗?

另外,我不能组建一个新的课程来结合MobileSuit和Pilot.我需要将它们分开,即使我一次迭代它们.原因是可能有没有飞行员的移动套装,我不知道如何通过将它们保持在同一级别来解决这个问题.这个类需要在其他地方进行处理,所以我必须统一一个接口和其他很多东西.基本上,假设MobileSuit和Pilot需要分开.

java generics iterator

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

如何引用迭代器中的当前对象

我试图在TreeSet中实现一个搜索方法.通过使用带有condtional的迭代器,我希望能够遍历集合并打印匹配条件的对象.然而,我现在这样做的方式是打印出后续对象而不是当前对象.这是我到目前为止:

public void getDetails() {
        Iterator<Person> it = this.getPersonSet().iterator();
        System.out.println("Enter First Name");
        String first = in.next().toLowerCase();
        System.out.println("Enter Second Name");
        String last = in.next().toLowerCase();

        while (it.hasNext()) {
            if (it.next().getLast().toLowerCase().equals(last)) {
                Person p = it.next();
                System.out.println(p);
            }
        }

    }
Run Code Online (Sandbox Code Playgroud)

任何帮助都会很棒

java iterator

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

迭代unique_ptr的容器

如何在不从容器中取得所有权的情况下访问容器的unique_ptr元素(通过迭代器)?当一个人获得容器中元素的迭代器时,元素所有权仍然与容器有关吗?当一个解引用迭代器来获取对unique_ptr的访问权限时怎么样?这是否执行unique_ptr的隐式移动?

当我需要将元素存储在容器中(而不是通过值)时,我发现我正在使用shared_ptr,即使容器在概念上拥有元素而其他代码只是希望操纵容器中的元素,因为我害怕无法实际访问容器中的unique_ptr元素而不从中获取所有权.

任何见解?

c++ containers iterator unique-ptr

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

Pythonic迭代整数位的方法

让我们a=1091101101二进制.如何迭代此数字的位,例如:[64, 32, 8, 4, 1]

python binary iterator

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

如何解决"迭代器应该返回字符串,而不是字节"

我正在尝试导入CSV文件,使用表单从客户端系统上传文件.收到文件后,我将采取部分内容并在我的应用中填充模型.但是,当我继续迭代上传文件中的行时,我得到一个"迭代器应该返回字符串,而不是字节"错误.我花了好几个小时尝试不同的东西并阅读我能找到的所有东西,但似乎无法解决它(注意,我对Django来说相对较新 - 运行1.5-和python - 运行3.3).我删除了一些事情来解决错误并像这样运行以确保它仍然存在.在tools_clubs_import()中执行"club_list中的俱乐部"行时显示错误:

以下是根据下面标记的答案修正后的views.py:

import csv
from io import TextIOWrapper
from django.shortcuts import render
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from rank.forms import ClubImportForm

def tools_clubs_import(request):
    if request.method == 'POST':
        form = ClubImportForm(request.POST, request.FILES)
        if form.is_valid():
            # the following 4 lines dumps request.META to a local file
            # I saw a lot of questions about this so thought I'd post it too
            log = open("/home/joel/meta.txt", "w")
            for k, v in request.META.items():
                print ("%s: %s\n" % (k, …
Run Code Online (Sandbox Code Playgroud)

python django iterator python-3.x

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

C++标准对std :: vector <int> v1,v2有什么看法; 性病::距离(v1.begin(),v2.begin())?

我有这个代码

#include <vector>
#include <iostream>

int main(int argc, char* argv[])
{
   std::vector<int> v1,v2;
   std::cout << std::distance(v1.begin(),v2.begin());
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

它有一个bug,因为比较两个不同向量的迭代器没有意义.

我看了一下N337624.4.4迭代器操作在815页:

template<class InputIterator>
typename iterator_traits<InputIterator>::difference_type
distance(InputIterator first, InputIterator last);
Run Code Online (Sandbox Code Playgroud)

要求:如果InputIterator符合随机访问迭代器的要求,last应可以从firstfirst到达last; 否则,last应该可以从 first.

现在我认为需求没有实现.

在这种情况下,标准状态应该发生什么?

c++ standards iterator c++-standard-library language-lawyer

27
推荐指数
2
解决办法
1054
查看次数

连续迭代器检测

C++ 17引入了ContiguousIterator的概念http://en.cppreference.com/w/cpp/iterator.然而,似乎没有计划contiguous_iterator_tag(通过我们现在以同样的方式random_access_iterator_tag)报告std::iterator_traits<It>::iterator_category.

为什么contiguous_iterator_tag失踪?

是否有传统的协议来确定迭代器是否是连续的?还是编译时间测试?

在过去我提到过,对于容器,如果有一个.data()成员转换为指向::value类型的指针,并且有.size()成员可转换为指针差异,那么应该假设容器是连续的,但我不能提取迭代器的类似特征.

一种解决方案可能是data为连续迭代器提供一个函数.

当然,连续概念&(it[n]) == (&(*it)) + n在所有情况下都有效n,但在编译时无法检查.


编辑:我发现这个视频把它放在更广泛的C++概念上下文中.CppCon 2016:"在现代多核世界中构建和扩展迭代器层次结构",作者:Patrick Niedzielski.解决方案使用概念(Lite),但最后的想法是连续的迭代器应该实现一个pointer_from函数(与我的data(...)函数相同).

结论是概念将有助于形式化理论,但它们并不神奇,在某种意义上,某个人会在某个地方定义新的特别命名的函数而不是连续的迭代器.这个讨论概括了分段迭代器(带有相应的函数segmentlocal),不幸的是它没有说明跨步指针.

c++ iterator iterator-traits c++17

27
推荐指数
1
解决办法
1826
查看次数