标签: iterator

返回IEnumerable <T>和IEnumerator <T>的迭代器方法之间有什么区别吗?

考虑具有相同实体的两个迭代器方法:

public static IEnumerable<int> It1() { 
    ...
}

public static IEnumerator<int> It2() { 
    ...
}
Run Code Online (Sandbox Code Playgroud)

呼叫It2与呼叫有It1.GetEnumerator()什么不同吗?

是否有充分的理由将迭代器定义为IEnumerator<T>结束IEnumerable<T>?我能想到的唯一一个就是你实施的时候IEnumerable<T>.GetEnumerator().

编辑:通过迭代器方法我的意思是使用yield returnyield break构造的方法.

c# iterator

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

在C#中的foreach语句中,每次迭代都会调用返回集合的方法吗?

我今天早上正在使用一些C#代码,我有类似的东西:

foreach(DataRow row in MyMethod.GetDataTable().Rows) {
//do something
}
Run Code Online (Sandbox Code Playgroud)

所以,由于我没有完全理解语言框架,我想知道每次迭代完成后是否调用GetDataTable(),或者只是调用一次并且结果数据(可能是Rows)保存在内存循环通过它.无论如何,我宣布了一个新的集合来保存它并从那里工作......

我添加了一个新变量,所以我做了:

DataRowCollection rowCollection = MyMethod.GetDataTable().Rows;
foreach(DataRow row in rowCollection) {
//do something
}
Run Code Online (Sandbox Code Playgroud)

但我不太确定这是否有必要.

提前致谢.

.net c# iterator loops

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

我可以在Java中使用的参数适用于所有for-each循环吗?

假设我有一个接受数组并使用Java内置for-each循环处理其中每个元素的方法,如下所示:

public static void myFun(SomeClass[] arr) {
    for (SomeClass sc : arr) {
        // Stuff is processed here
    }
}
Run Code Online (Sandbox Code Playgroud)

这很好用,但现在我希望能够传递相同的方法List<SomeClass>.我注定要使用Collection.toArray(T []),还是我可以使用的参数myFun()接受任何可以在for-each构造中使用的类型?

澄清:我想要一个接受任何可迭代对象的方法签名,无论是原始数组还是Collection.我可以很容易地编写两种方法,一种方法包装另一种方法,但我只是好奇是否有更好的方法.

java foreach iterator

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

在vs2008 SP1中禁用已检查的迭代器时出现问题(_HAS_ITERATOR_DEBUGGING = 0)

当我尝试禁用已检查的迭代器时,我在调试模式下运行vs2008 SP1时遇到了一些麻烦.以下程序重现问题(字符串析构函数崩溃):

#define _HAS_ITERATOR_DEBUGGING 0

#include <sstream>

int do_stuff(std::string const& text)
{
    std::string::const_iterator i(text.end());
    return 0;
}

int main()
{
    std::ostringstream os;
    os << "some_text";
    return do_stuff(os.str());
}
Run Code Online (Sandbox Code Playgroud)

我在gamdev.net上发现了类似的帖子,讨论了在vs2005中遇到这个问题.该帖子中的示例程序按原样编译为2008 SP1 - 但是当我将其修改为使用ostringstream时,我能够解决问题.

从调试器中调试来看,它看起来像是从堆栈中弹出迭代器,然后尝试在_Orphan_All中使用它们,这是某种迭代器检查清理代码......

任何人都可以重现这个问题或者告诉我发生了什么事吗?

谢谢!

c++ crash debugging iterator visual-studio-2008

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

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
查看次数

如何创建过滤向量的迭代器?

假设我有一个名为向量spot_dealsSpotDeal是一个类:

class SpotDeal
{
public:
    int deal_id_; // primary key, and vector is sorted by id
    string ccy_pair_; // ccy pair, e.g. GBPUSD, AUDUSD
    double amount_;
}
Run Code Online (Sandbox Code Playgroud)

假设我需要将两个子集传递spot_deals给某个函数foo以进行某些计算。但是,我可以制作副本,这会消耗内存和时间。实际上foo只需要交易的迭代器。那么我可以制作 2 个迭代器vector<SpotDeal>,即it1andit2并将它们传递给foo

这两个子集spot_deals可以过滤ccy_pair_,例如 GBPUSD 和 AUDUSD 的交易,或其他条件。所以我正在寻找一种方法来定义由向量和 lambda 函数定义的迭代器(尽管可以等效地是一个函子)。

有没有办法编写一个辅助函数,make_filtered_iterator以便我可以有如下内容?

auto it1 = make_filtered_iterator(spot_deals, filter_lambda1);
auto it2 = make_filtered_iterator(spot_deals, filter_lambda2);
foo(it1, it2);
Run Code Online (Sandbox Code Playgroud)

c++ lambda containers iterator filter

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

使用迭代器仅在某些索引处访问值

我很难理解std::accumulate。它可以用于仅对向量的偶数索引求和吗?

int rob(vector<int>& nums) {

    int a = std::accumulate(nums.begin(), nums.end(), 0);

   std::cout <<" a: " <<a; 
   return a;

}
Run Code Online (Sandbox Code Playgroud)

所以如果我有一个 vector y = {1, 2, 3, 4}

我如何更改上面的代码,以便std::accumulate仅对索引[0]和[2]进行迭代。使用它甚至可能std::accumulate吗?

c++ algorithm lambda iterator stl

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