Tag: 迭代器

如何在Python中读取一行csv数据?

有很多使用python读取csv数据的例子,像这样: import csv with open('some.csv', newline='') as f: reader = csv.reader(f) for row in reader: print(row) 我只想读取一行数据并将其input到各种variables中。 我怎么做? 我到处寻找一个工作的例子。 我的代码只检索我的值,而没有其他值 reader = csv.reader(csvfile, delimiter=',', quotechar='"') for row in reader: i = int(row[0]) a1 = int(row[1]) b1 = int(row[2]) c1 = int(row[2]) x1 = int(row[2]) y1 = int(row[2]) z1 = int(row[2])

尽早在Ruby中避免.each {}迭代

码: c = 0 items.each { |i| puts i.to_s # if c > 9 escape the each iteration early – and do not repeat c++ } 我想抓住前10个项目,然后离开“每个”循环。 我用什么来replace注释行? 有更好的方法吗? 更多Ruby的惯用语?

Java:为什么Collection.addAll不能接受Iterables?

我想知道为什么Collection.addAll()方法只接受其他Collection而不是Iterable 。 这是为什么? 任何类似的方法来做这样的Iterable ?

在Java中迭代和从Hashtable中删除

我在Java中有一个Hashtable,想迭代表中的所有值,并在迭代时删除特定的键值对。 这可能怎么做?

你如何通过STL列表向后迭代?

我在Windows和Mac之间编写了一些跨平台的代码。 如果list :: end()“返回一个迭代器来处理列表中最后一个元素的后续位置”,并且可以在向前遍历列表时检查,那么向后遍历的最好方法是什么? 此代码在Mac上工作,但不在Windows上(不能超出第一个元素): list<DVFGfxObj*>::iterator iter = m_Objs.end(); for (iter–; iter!=m_Objs.end(); iter–)// By accident discovered that the iterator is circular ? { } 这在Windows上工作: list<DVFGfxObj*>::iterator iter = m_Objs.end(); do{ iter–; } while (*iter != *m_Objs.begin()); 是否有另一种可以在for循环中实现的向后遍历?

const_iterator是否更快?

我们的编码指南更喜欢const_iterator ,因为它们比正常的iterator要快一些。 当你使用const_iterator时,编译器看起来好像优化了代码。 这真的是对的吗? 如果是的话,真正发生在内部的是什么让const_iterator更快? 编辑:我写了小testing检查const_iterator与iterator ,发现不同的结果: 对于迭代10,000个对象, const_terator要花费几毫秒(大约16毫秒)。 但并不总是 。 有两个迭代是平等的。

在STL或增强的C ++范围/ xrange等效?

在STL或boost中是否存在用于python Xrange生成器的C ++等价物? xrange基本上每次调用++运算符都会生成递增的数字。 构造函数是这样的: xrange(first, last, increment) 希望能够像这样使用boost来做一些事情: foreach(int i, xrange(N)) 我知道for循环。 在我看来,他们是太多的样板。 谢谢 我的理由是: 我想要这样做的主要原因是因为我使用语音到文本软件,并且编程循环通常的方式很难,即使使用代码完成。 有可读性的结构要高效得多。 许多循环从零开始并递增1,这是范围的默认值。 我发现python构造更直观 for(int i = 0; i < N; ++i) foreach(int i, range(N)) 需要以范围为参数的函数: Function(int start, int and, int inc); function(xrange r); 我理解语言之间的差异,但是如果Python中的特定结构对我非常有用,并且可以用C ++高效地实现,那么我不会看到不使用它的原因。 对于每个构造都是C ++外来的,然而人们使用它。 我把我的实现在页面底部以及示例用法。 在我的领域,我使用multidimensional array,通常排名第四张量。 所以我通常会得到4个不同范围/增量的嵌套循环来计算规范化,索引等,这些不一定是性能循环,而我更关心正确性的可读性和修改能力。 例如 int function(int ifirst, int ilast, int […]

C ++的默认拷贝构造函数本质上是不安全的? 迭代器从根本上是不安全的?

我曾经认为,遵循最佳实践时,C ++的对象模型是非常强大的。 就在几分钟前,我意识到我以前没有过。 考虑这个代码: class Foo { std::set<size_t> set; std::vector<std::set<size_t>::iterator> vector; // … // (assume every method ensures p always points to a valid element of s) }; 我已经写了这样的代码。 直到今天,我还没有看到它的问题。 但是,再想一想,我意识到这个class很破碎: 它的复制构造函数和复制分配复制 vector 的迭代器 ,这意味着它们仍然指向旧 set ! 毕竟新的不是真的! 换句话说, 即使这个类没有pipe理任何资源(无RAII) , 我也必须手动实现copy-constructor ! 这让我感到惊讶。 我从来没有遇到过这个问题,我不知道有什么优雅的方法来解决它。 再想一想,在我看来, 复制构造默认是不安全的 – 实际上,在我看来,类不应该是默认可复制的,因为它们的实例variables之间的任何耦合都有可能导致默认的复制-constructor无效 。 迭代器从根本上不安全的存储? 或者,类应该默认是不可复制的? 下面我想到的解决scheme都是不可取的,因为它们不让我利用自动生成的拷贝构造函数: 手动实现我写的每个非平凡类的复制构造函数。 这不仅容易出错,而且要写一个复杂的课程也是很痛苦的。 […]

Java获取集合的最后一个元素

我有一个集合,我想获得集合的最后一个元素。 什么是最直接和最快捷的方式呢? 一种解决方法是首先toArray(),然后返回数组的最后一个元素。 还有其他更好的吗?

在ArrayList上操作时,AbstractList.remove()中的UnsupportedOperationException

ArrayList的列表迭代器确实实现了remove方法,但是我得到了下面的exception抛出:UnsupportedOperationException java.util.AbstractList.remove(AbstractList.java:144) 通过这个代码: protected void removeZeroLengthStringsFrom(List<String> stringList) { ListIterator<String> iter = stringList.listIterator(); String s; while (iter.hasNext()) { s = iter.next(); if (s.length() == 0) { iter.remove(); } } } 我在这里错过了什么? 我已经validation了我传入的List<String>确实是ArrayList<String> 。 谢谢!