标签: iterator

在Java中显示列表与Python中一样优雅

在Python中,将逗号显示为以逗号分隔的列表非常容易:

>>> iterable = ["a", "b", "c"]
>>> ", ".join(iterable)
'a, b, c'
Run Code Online (Sandbox Code Playgroud)

是否有一种接近这种简洁的Java方式?(注意最后没有",".)

python java iterator join list

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

d2:将范围/迭代器分配给数组切片

考虑以下代码:

enum size = 16;
double[size] arr1 = [...];
double[size] arr2 = [...];
process = (double x) { return (x + 1); };

arr2[] = map!(process)(arr1[]); // here
Run Code Online (Sandbox Code Playgroud)

我无法将结果转换map回我的普通数组.问题不仅适用于map,而且要take,repeat并从所有这些精细的工具std.algorithm,并std.range在该范围内操作.

在这个任务上,我明白了Error: cannot implicitly convert expression (map(arr1[])) of type Result to double[].如何在不使用的情况下评估范围到数组

uint i = 0;
foreach (x; map!(process)(arr1[])) {
    arr2[i] = x;
    i++;
}
Run Code Online (Sandbox Code Playgroud)

另外,有人可以解释,为什么我必须调用map!(process)(arr1[])而不是map!(process)(arr1)静态数组?静态数组不应该与动态的迭代方法兼容,或者我没有得到什么?

此外,似乎简单的枚举语法foreach (index, item; sequence)不适用于范围 - …

iterator d range

7
推荐指数
1
解决办法
430
查看次数

C++ STL,常量迭代器,find()

我目前正在学习STL,我对find和const迭代器有一些不确定性.假设我有一个find函数:

some_stl_container::const_iterator found = myContainer.find(value);
Run Code Online (Sandbox Code Playgroud)

在那之后,我应该检查我得到的found另一个const_iterator,或者只是对一个迭代器进行检查是有效的.基本上这样做会有任何区别:

if(found!=myContainer.cend())
Run Code Online (Sandbox Code Playgroud)

还有这个:

if(found!=myContainer.end())
Run Code Online (Sandbox Code Playgroud)

第一个看起来更准确(至少对我而言),但第二个应该也能正常工作,对吗?

c++ iterator stl constants find

7
推荐指数
1
解决办法
1756
查看次数

是否可以在Rust中实现自定义Iterator :: sum?

我是Rust的新手,我正在努力学习迭代器.我正在研究的具体问题是产生三角形数字的迭代器(三角形数字为1,3,6,10,15,其中1 = 1,3 = 1 + 2,6 = 1 + 2 + 3等).我有这个创建的基础知识,如下所示:

pub struct Triangle {
    cur: u32,
    n: u32,
    m: u32,
}

impl Iterator for Triangle {
    type Item = u32;

    fn next(&mut self) -> Option<u32> {
        if self.n == self.m {
            return None;
        }
        self.n = self.n + 1;
        self.cur = self.cur + self.n;

        Some(self.cur)
    }
}
Run Code Online (Sandbox Code Playgroud)

一个快速可运行的例子是

let t = Triangle { cur: 0, n: 0, m: 10 };
let s: u32 = t.sum();
println!("{}", s); …
Run Code Online (Sandbox Code Playgroud)

iterator rust

7
推荐指数
1
解决办法
684
查看次数

使用Keras model.fit_generator生成器

我最初尝试generator在编写用于训练Keras模型的自定义生成器时使用语法.所以我yield编辑__next__.但是,当我尝试训练我的模式时,model.fit_generator我会得到一个错误,我的生成器不是迭代器.的修复是改变yieldreturn其中还必要rejiggering的逻辑__next__以跟踪状态.与让yield我为我工作相比,这相当麻烦.

有没有办法可以让这个工作yield?如果我必须使用return语句,我将需要编写几个迭代器,这些迭代器必须具有非常笨重的逻辑.

iterator generator python-3.x keras

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

std :: set iterator具有相同的键和不同的比较器

在试图解决一个问题,我开始思考这个-给予user-defined class和2 comparators吧,让我们说我们有2套std::set<user_class,comparator_inc>,并std::set<user_class,comparator_dec>comparators排序上的一个值增减值user_class(一个简单的int也许).这是我的代码:

#include <iostream>
#include <set>

using std::cout;
using std::endl;
using std::set;

struct A
{
    int val;
};
struct c_inc
{
    bool operator()(const A& first,const A& second) const
    {
        return first.val > second.val;
    }
};
struct c_dec
{
    bool operator()(const A& first,const A& second) const
    {
        return first.val < second.val;
    }
};

int main()
{
    set<A,c_inc> s1;
    set<A,c_dec> s2;

    auto x = s1.insert({1});
    cout << x.first->val …
Run Code Online (Sandbox Code Playgroud)

c++ iterator set language-lawyer c++11

7
推荐指数
1
解决办法
246
查看次数

在二进制堆上实现迭代器

我正在寻找一种在二进制堆(最大或最小)上实现迭代器的方法。

也就是说,通过第i次使用其nextNode()函数,可以获得堆中第i个(更大或更小的)元素。

请注意,此操作是在没有实际提取堆根的情况下发生的!

我最初的想法是:

  • 实际上提取i元素,将它们压入堆栈,然后在获得第i个值后将它们重新插入堆中。每个函数调用都需要O(i * log(n))。
  • 保留一个辅助排序的数据结构,该结构可以允许在O(1)中查找下一个值,但是更新将占用O(n)。

我了解这些方法消除了使用堆的好处,因此我正在寻找一种更好的方法。

heap iterator binary-heap

7
推荐指数
1
解决办法
206
查看次数

使用Scala Iterator使用RegEx匹配将大型流(从字符串)分解成多个块,然后对这些块进行操作?

我目前正在使用一种不太像scala的方法来解析大型Unix邮箱文件。我仍在学习该语言,并想挑战自己以寻求更好的方法,但是,我不相信我对使用an可以做什么Iterator以及如何有效使用它有扎实的了解。

我目前正在使用 org.apache.james.mime4j,并且使用org.apache.james.mime4j.mboxiterator.MboxIteratorjava.util.Iterator从文件中获取,因此:

 // registers an implementation of a ContentHandler that
 // allows me to construct an object representing an email
 // using callbacks
 val handler: ContentHandler = new MyHandler();

 // creates a parser that parses a SINGLE email from a given InputStream
 val parser: MimeStreamParser = new MimeStreamParser(configBuilder.build());
 // register my handler
 parser.setContentHandler(handler);

 // Get a java.util.Iterator
 val iterator = MboxIterator.fromFile(fileName).build();
 // For each email, process it using above Handler
 iterator.forEach(p => …
Run Code Online (Sandbox Code Playgroud)

regex iterator scala stream chunking

7
推荐指数
1
解决办法
246
查看次数

自从C ++ 17的类模板参数推论以来,std :: make_move_iterator是否多余?

从C ++ 11开始,要将某些向量追加y到另一个向量x,可以执行以下操作:

x.insert(x.end(), std::make_move_iterator(y.begin()), std::make_move_iterator(y.end()));
Run Code Online (Sandbox Code Playgroud)

使用C ++ 17类模板参数推论,可以更简洁地编写此代码:

x.insert(x.end(), std::move_iterator(y.begin()), std::move_iterator(y.end()));
Run Code Online (Sandbox Code Playgroud)

从C ++ 17开始,这不会变得std::make_move_iterator多余吗?拥有一些有价值的东西std::make_move_iterator()吗?

c++ iterator c++17

7
推荐指数
1
解决办法
95
查看次数

为什么 std::next/prev 不像 std::advance 那样按距离模板化?

出于好奇,对 的std::advance()距离类型使用模板参数的基本原理是什么,但difference_type对距离 instd::next()和使用迭代器的基本原理是什么std::prev()

为什么不使用相同的方法(任一方法)?

跟进:

默认的存在n = 1似乎并没有阻止next被模板化,Distance正如下面答案中所建议的那样。这编译:

#include <iterator>
#include <set>

template<typename InputIt,
    typename Distance = typename std::iterator_traits<InputIt>::difference_type>
InputIt my_next(InputIt it, Distance n = 1)
{
    std::advance(it, n);
    return it;
}

int main()
{
    std::set<int> s;
    my_next(s.begin());
    my_next(s.begin(), 10ul);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ iterator c++11

7
推荐指数
1
解决办法
129
查看次数

标签 统计

iterator ×10

c++ ×4

c++11 ×2

binary-heap ×1

c++17 ×1

chunking ×1

constants ×1

d ×1

find ×1

generator ×1

heap ×1

java ×1

join ×1

keras ×1

language-lawyer ×1

list ×1

python ×1

python-3.x ×1

range ×1

regex ×1

rust ×1

scala ×1

set ×1

stl ×1

stream ×1