标签: iterator

迭代std-containers中的所有元素对(C++)

什么是遍历所有对性病容器类元件的最佳途径std::list,std::set,std::vector,等?

基本上做相当于这个,但与迭代器:

for (int i = 0; i < A.size()-1; i++)
    for(int j = i+1; j < A.size(); j++)
        cout << A[i] << A[j] << endl;
Run Code Online (Sandbox Code Playgroud)

c++ iterator stl

14
推荐指数
1
解决办法
4665
查看次数

聪明地使用.Net 2迭代器

C#2和VB.Net 8引入了一个名为迭代器的新功能,旨在使返回枚举数和枚举数变得更容易.

但是,迭代器实际上是一种有限形式的协同程序,可以用来做许多与对象集合无关的有用的东西.

您在实际代码中看到了什么非标准的迭代器用法?

.net c# vb.net iterator

14
推荐指数
2
解决办法
1133
查看次数

如何计算可迭代中的非null元素?

我正在为以下代码片段寻找更好/更多的Pythonic解决方案

count = sum(1 for e in iterable if e)
Run Code Online (Sandbox Code Playgroud)

python iterator list-comprehension idiomatic

14
推荐指数
1
解决办法
9281
查看次数

如何"窥视"Java Scanner上的下一个元素?

也就是说,如何在不删除迭代器的情况下获取迭代器的下一个元素?因为我可能会或可能不想根据其内容删除它.我有一个文件扫描程序,我使用Scanner next()方法迭代XML标记.

提前致谢.

java iterator

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

如何实现operator-> for iterator类型?

有没有办法实现operator->,而不仅仅是operator*.要使以下代码有效:

Iterator<value> it = ...
i = (*it).get();
i = it->get(); // also works
Run Code Online (Sandbox Code Playgroud)

我们说值类型有方法get.当Iterator实现如下:

template<T> class Iterator {
    T operator*() { return ... }
    T operator->()  { return ... }
 }
Run Code Online (Sandbox Code Playgroud)

这里......是获得正确T对象的实现.

不知何故,当我以这种方式实现它时,它将无法工作.我想我误解了一些事情.

c++ iterator operator-overloading

14
推荐指数
2
解决办法
8344
查看次数

'numpy.float64'对象不可迭代

我正在尝试迭代使用numpy.linspace生成的值数组:

slX = numpy.linspace(obsvX, flightX, numSPts)
slY = np.linspace(obsvY, flightY, numSPts)

for index,point in slX:
    yPoint = slY[index]
    arcpy.AddMessage(yPoint)
Run Code Online (Sandbox Code Playgroud)

这段代码在我的办公室计算机上工作正常,但我今天早上坐下来在家里在另一台机器上工作,这个错误出现了:

File "C:\temp\gssm_arcpy.1.0.3.py", line 147, in AnalyzeSightLine
  for index,point in slX:
TypeError: 'numpy.float64' object is not iterable
Run Code Online (Sandbox Code Playgroud)

slX只是一个浮点数组,脚本打印内容没有问题 - 只是,显然迭代它们.是什么导致它破坏的建议,以及可能的修复?

python iterator numpy

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

为什么std :: map(以及STL中的其他关联容器)没有front()方法?

STL参考似乎使之间的概念上的差异:

  • 'Sequence containers'(数组向量deque forward_list list)一方面
  • 另一方面,'关联容器'(设置multiset map multimap unordered_set unordered_multiset unordered_map unordered_multimap).

而且,似乎我们有:

  • 实现begin()返回指向容器中第一个元素的迭代器的方法的所有容器.
  • 只有序列容器有一个front()方法返回对容器中第一个元素的引用.

我的理解是,通过仅取消引用其返回值,可以根据front()方法轻松定义该begin()方法.

因此,我的问题是:为什么不为front()定义方法的所有对象定义begin()方法?(真的应该是每个容器)

(我想从语义的角度来看,从地图中获取第一个元素并不像从矢量中获取第一个元素那样有意义,但我想知道是否有更有效的解释).

c++ containers iterator stl map

14
推荐指数
2
解决办法
4838
查看次数

是否有可能合理地模拟yield-syntax,也许是在Java 8的帮助下?

我今天正在尝试这个问题,来自欧拉问题:

回文数字两种方式相同.由两个2位数字的乘积制成的最大回文是9009 = 91×99.

找到由两个3位数字的乘积制成的最大回文.

我考虑过它,它当然可以用for循环完成,但是我想使用Java 8,因为它打开了新的选项.

但首先,我不知道如何生成IntStream产生这样的元素,所以我仍然使用正常的for循环:

public class Problem4 extends Problem<Integer> {
    private final int digitsCount;

    private int min;
    private int max;

    public Problem4(final int digitsCount) {
        this.digitsCount = digitsCount;
    }

    @Override
    public void run() {
        List<Integer> list = new ArrayList<>();
        min = (int)Math.pow(10, digitsCount - 1);
        max = min * 10;

        for (int i = min; i < max; i++) {
            for (int j = min; j < max; j++) {
                int sum = i …
Run Code Online (Sandbox Code Playgroud)

java iterator yield java-8

14
推荐指数
2
解决办法
2982
查看次数

将对象从一个unordered_map移动到另一个容器

我的问题是安全问题.我搜索了cplusplus.com和cppreference.com,他们似乎缺乏std :: move期间的迭代器安全性.具体来说:使用已移动对象的迭代器调用std :: unordered_map :: erase(iterator)是否安全?示例代码:

#include <unordered_map>
#include <string>
#include <vector>
#include <iostream>
#include <memory>

class A {
public:
    A() : name("default ctored"), value(-1) {}
    A(const std::string& name, int value) : name(name), value(value) { }
    std::string name;
    int value;
};
typedef std::shared_ptr<const A> ConstAPtr;

int main(int argc, char **argv) {
    // containers keyed by shared_ptr are keyed by the raw pointer address
    std::unordered_map<ConstAPtr, int> valued_objects;

    for ( int i = 0; i < 10; ++i ) {
        // …
Run Code Online (Sandbox Code Playgroud)

c++ iterator unordered-map move-semantics

14
推荐指数
1
解决办法
2837
查看次数

Rust Iterator和C++ Iterator之间的主要区别是什么?

C++迭代器的典型示例是指针,可用于指向C数组中的元素,如下所示:

int array[] = {1, 2, 3, 4};
int* begin = std::begin(array); //Starting iterator
int* end = std::end(array) //Ending iterator

for(int* i = begin; i < end; i++)
{
    std::cout << *i << ',';
}

//Prints 1, 2, 3, 4
Run Code Online (Sandbox Code Playgroud)

这很简单.来自cplusplus.com的迭代器的定义是

迭代器是指向一系列元素(例如数组或容器)中的某个元素的任何对象,它能够使用一组运算符迭代该范围的元素...

这是有道理的; 在上面的代码中有两个迭代器(beginend迭代器),它使用一个for循环并递增.

在Rust中,迭代器的使用方式如下:

let vect = vec![1, 2, 3, 4];

let vect_iter = vect.iter();
Run Code Online (Sandbox Code Playgroud)

什么?要迭代它,你可以:

vect_iter.next();
vect_iter.next();
Run Code Online (Sandbox Code Playgroud)

我在Rust文档中找不到任何指针的确切定义,但是看一下该Iterator特性,似乎迭代器是容器的包装器,通过以某种方式标准化逻辑来实现更容易的处理(如果是一点都有意义.

我的主要问题是:

  1. 有哪些主要区别?
  2. 为什么Rust以这种方式拥有迭代器,为什么它们表达方式如此不同?
  3. C++中是否有Rust类型的迭代器?
  4. 是否有C++ - 在Rust中输入迭代器?
  5. 它们被称为具体的东西吗?(内部外部?)

c++ iterator rust

14
推荐指数
1
解决办法
1178
查看次数