标签: iterator

iterator_to_array

DatePeriod是一个用于处理重复日期的PHP类.它的方法数量非常有限.因此,当我想要使用重复日期执行基本数组函数时,我必须将其复制到数组中iterator_to_array.奇怪的是,复制它似乎破坏了它.有什么想法吗?

$p=new DatePeriod(date_create('2008-01-01'),
                  DateInterval::createFromDateString( "+2 days" ),
                  date_create('2008-12-31')); 

echo count(iterator_to_array($p)); //183 

$a=iterator_to_array($p); 
echo count($a); //0 
Run Code Online (Sandbox Code Playgroud)

php oop spl iterator

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

我在哪里可以获得C++中的示例代码,为我自己的容器创建迭代器?

我一直在寻找为我自己的容器创建迭代器的示例代码,但我还没有找到一个很好的例子.我知道之前曾经问过这个问题(创建我自己的迭代器)但是没有看到任何令人满意的答案.

我正在寻找简单的示例代码来开始如何设计我自己的迭代器.

谢谢

c++ containers iterator stl list

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

使用Javascript RegExp将每个匹配替换为迭代编号

我想用迭代数替换字符串中的空行

例如,替换

串:

"My first line

My second line

My third line"
Run Code Online (Sandbox Code Playgroud)

"
1

My first line

2

My second line

3

My third line"
Run Code Online (Sandbox Code Playgroud)

我可以使用匹配和替换这些行

var newstring = TestVar.replace (/(^|\n\n)/g, "\nhello\n");
Run Code Online (Sandbox Code Playgroud)

但是我正在努力添加一个函数,它会为每个函数添加一个迭代数.

你能帮我吗?

TIA,

导游服务

javascript regex iterator replace

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

为什么GetEnumerator()存储在与IEnumerator不同的接口中?

我想知道为什么GetEnumerator()方法是从IEnumerator中分解出来并放在IEnumerable中的.在我看来,将所有枚举器方法保留在IEnumerator中会更有意义.

谢谢,

斯科特

c# ienumerable ienumerator iterator

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

如何删除jQuery选择的最后一个元素?

我使用jquery选择器:

$('#menus>ul>li>a')
Run Code Online (Sandbox Code Playgroud)

我想在没有最后一个的情况下迭代选择器结果:

$('#menus>ul>li>a').removeLast().each(fct());
Run Code Online (Sandbox Code Playgroud)

当然,函数"removeLast()"不存在,是否有相应的?

谢谢.

jquery iterator css-selectors

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

接受stl_container_type <string> :: iterator的模板化参数

我有一个函数,其中我有保持的字符串(例如一个容器vector<string>,set<string>,list<string>给定的开始迭代和结束迭代器),并且,经过迭代范围处理所述字符串.

目前该函数声明如下:

template< typename ContainerIter>
void ProcessStrings(ContainerIter begin, ContainerIter end);
Run Code Online (Sandbox Code Playgroud)

现在,这将接受任何符合实现operator*,前缀operator++和函数体中其他调用的隐式接口的类型.

我真正想做的是有一个像下面那样明确限制输入量的定义(伪代码警告):

template< typename Container<string>::iterator>
void ProcessStrings(Container<string>::iterator begin, Container<string>::iterator end);
Run Code Online (Sandbox Code Playgroud)

所以我可以这样使用它:

vector<string> str_vec;
list<string> str_list;
set<SomeOtherClass> so_set;

ProcessStrings(str_vec.begin(), str_vec.end());  // OK
ProcessStrings(str_list.begin(), str_list.end());  //OK
ProcessStrings(so_set.begin(), so_set.end());  // Error
Run Code Online (Sandbox Code Playgroud)

本质上,我想要做的是限制函数规范,使函数的用户明白它接受的内容,如果代码编译失败,他们会得到一条消息,他们使用了错误的参数类型而不是XXX类无法找到XXX函数的函数体.

c++ templates iterator

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

C#迭代器设计的基本原理(与C++相比)

我发现了类似的主题:
C++(stl)与Java中的迭代器,是否存在概念上的差异?

这基本上处理Java迭代器(类似于C#)无法后退.

所以在这里我想关注限制 - 在C++迭代器中不知道它的限制,你自己将给定的迭代器与限制进行比较.在C#中,迭代器知道更多 - 如果迭代器有效,你可以在不与任何外部引用比较的情况下判断.

我更喜欢C++方式,因为一旦有了迭代器,你可以将任何迭代器设置为限制.换句话说,如果您只想获得少量元素而不是整个集合,则不必更改迭代器(在C++中).对我来说它更"纯粹"(清晰).

但是当然MS在设计C#时知道这个和C++.那么C#方式的优点是什么?哪种方法更强大(这导致基于迭代器的更优雅的功能).我错过了什么?

如果您对C#与C++迭代器设计的想法不同于它们的限制(边界),请同时回答.

注意 :(以防万一)请保持严格的技术讨论.没有C++/C#flamewar.

EDITS

正如Tzaman所说:"限制单独表达没有任何好处,因为除了一次走一个元素之外没有办法到达那里." 但是,构建一个一次执行几个步骤的C#迭代器并不困难,因此问题是 - 是否有一个显式限制迭代器的好处(如在C++中)?如果是 - 什么?

@乔恩,

Edit1:假设你有一个函数foo,它在迭代器上做了一些事情(这个例子很天真!)

void foo(iter_from,iter_end) // C++ style
void foo(iter) // C# style 
Run Code Online (Sandbox Code Playgroud)

现在你想在除了最后10个之外的所有元素上调用功能栏.

bar(iter_from,iter_end-10); // C++ style
Run Code Online (Sandbox Code Playgroud)

在C#中(如果我没有记错的话)你必须为这个迭代器提供额外的方法来改变它的限制,如下所示:

bar(iter.ChangeTheLimit(-10));
Run Code Online (Sandbox Code Playgroud)

编辑2:重读你的帖子后,我感觉到了至关重要的区别.在C++中,您处理集合的迭代器,在C#中您处理集合(迭代器在内部使用).如果是的话,我仍然对C#感到有点不舒服 - 你迭代了这个集合,当你找到有趣的元素时,你想要将所有元素从"here"传递到结尾.在C++中,它非常简单,没有开销.在C#中,您要么传递一个迭代器,要么传递一个集合(如果后者会有额外的计算).我等你的评论:-)

@Hans,

我不是在比较苹果和橘子.比较.理论在这里是共同点,所以你有排序算法,分区等.你有收集的概念(或序列,如乔恩喜欢).现在 - 问题是你如何设计对元素的访问,以便用C#或C++(或任何其他语言)编写优雅的算法.我想理解"我们这样做的原因,因为......".

我知道.NET迭代器和集合是单独的类.我知道访问元素和整个集合之间的区别.但是在C++中,处理集合的最常用方法是使用迭代器 - 这样您就可以使用列表和向量,尽管这些集合完全不同.另一方面,在C#中你更愿意写

sort(IEnumerable<T> coll) 
Run Code Online (Sandbox Code Playgroud)

功能而不是

sort(IEnumerator<T> iter)
Run Code Online (Sandbox Code Playgroud)

正确?所以在这个意义上我猜你不能把C#迭代器作为C++迭代器,因为C#不像C++那样表达相同的算法.或者正如Jon指出的那样 - 在C#中你更倾向于转换集合(Skip,Take)而不是改变迭代器.

c# iterator

7
推荐指数
3
解决办法
2408
查看次数

如何将生成器或迭代器转换为递归列表

我想将生成器或迭代器转换为递归列表.
我在下面编写了一个代码,但它看起来很幼稚和丑陋,可能会在doctest中删除.

Q1.帮帮我好版本.
Q2.如何指定对象是不可变的?

import itertools

def isiterable(datum):
    return hasattr(datum, '__iter__')

def issubscriptable(datum):
    return hasattr(datum, "__getitem__")

def eagerlize(obj):
    """ Convert generator or iterator to list recursively.
    return a eagalized object of given obj.
    This works but, whether it return a new object, break given one.

    test 1.0 iterator

    >>> q = itertools.permutations('AB',  2)
    >>> eagerlize(q)
    [('A', 'B'), ('B', 'A')]
    >>>

    test 2.0 generator in list

    >>> q = [(2**x for x in range(3))]
    >>> eagerlize(q)
    [[1, 2, 4]]
    >>>

    test …
Run Code Online (Sandbox Code Playgroud)

python recursion iterator generator immutability

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

编写stl兼容的迭代器

我正在尝试转换迭代器类,我必须与stl兼容,以便它可以与stl算法一起使用.在下面的简单(和坦率无用)示例中,应该打印0到5的值,我收到以下错误,

ISO C++禁止递增类型'Iterator(*)()'的指针

和,

从'Iterator(*)()'到'int'的无效转换

我究竟做错了什么?

谢谢.


#include <iterator>
#include <algorithm>
#include <iostream>

class Iterator : public std::iterator<std::bidirectional_iterator_tag, int> {
    public:
        Iterator(int i = 0) : val(i) {
            if(val<0 || val>5) throw;
        }

        bool operator==(Iterator const& rhs) const {
            return (val==rhs.val);
        }

        bool operator!=(Iterator const& rhs) const {
            return !(*this==rhs);
        }

        Iterator& operator++() {
            if(val!=6)
                ++val;
            return *this;
        }   

        Iterator operator++(int) {
            Iterator tmp (*this);
            ++(*this);
            return tmp;
        }

        Iterator& operator--() {
            if(val!=-1)
                --val;
            return *this;
        }

        Iterator operator--(int) { …
Run Code Online (Sandbox Code Playgroud)

c++ iterator stl

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

BucketIterator 抛出“Field”对象没有属性“vocab”

这不是一个新问题,我找到了没有任何解决方案的参考文献firstsecond。我是 PyTorch 的新手,AttributeError: 'Field' object has no attribute 'vocab'PyTorch使用torchtext.

继本书之后,Deep Learning with PyTorch我编写了与书中解释的相同的示例。

这是片段:

from torchtext import data
from torchtext import datasets
from torchtext.vocab import GloVe

TEXT = data.Field(lower=True, batch_first=True, fix_length=20)
LABEL = data.Field(sequential=False)
train, test = datasets.IMDB.splits(TEXT, LABEL)

print("train.fields:", train.fields)
print()
print(vars(train[0]))  # prints the object



TEXT.build_vocab(train, vectors=GloVe(name="6B", dim=300),
                 max_size=10000, min_freq=10)

# VOCABULARY
# print(TEXT.vocab.freqs)  # freq
# print(TEXT.vocab.vectors)  # vectors
# print(TEXT.vocab.stoi)  # Index

train_iter, test_iter …
Run Code Online (Sandbox Code Playgroud)

python iterator nlp pytorch torchtext

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