gpt4 book ai didi

c++ - 这是使用基于范围的 for 循环的合理方法吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:04:09 24 4
gpt4 key购买 nike

我最近想知道 c++11 中基于范围的 for 循环的要求是什么,因为我只见过预期用法的示例:

for (auto person : people)
{
cout << person.name << endl;
}

但是考虑到一个容器只需要有开始和结束方法,但根本不需要包含任何东西,下面会被认为是“不好的做法”吗?如果不出意外,如果有人在面试中问你斐波那契数列,这是一个新鲜的答案!

#include <string>
#include <iostream>
#include <Windows.h>

using namespace std;

struct FibItr
{
FibItr(int cur = 1, int prev = 0) : mCur(cur), mPrev(prev) {}
FibItr & operator++()
{
mCur += mPrev;
mPrev = mCur - mPrev;
return *this;
}

int operator*(){ return mCur; }

bool operator!=(const FibItr & _rhs)
{
return mCur != _rhs.mCur || mPrev != _rhs.mPrev;
}

unsigned int mCur, mPrev;
};

struct Fib
{
FibItr begin() { return FibItr(); }
FibItr end() { return FibItr(0, 0); }
};

int main( int argc, char* argv[] )
{
for (auto num : Fib())
{
cout << num << endl;
Sleep(500);
}

return 0;
}

最佳答案

问题不在于auto for-loop,而是实现奇怪的迭代器是否合理。虽然存在极端情况,但您可以为将某些操作实现为迭代器提供完美的论据(内存斐波那契就是一个很好的例子)。

整个库都致力于将迭代器变成更多东西,所以其他一些人也认为这是个好主意。

顺便说一句:实现迭代器是一项棘手的工作,这就是为什么应该谨慎使用这样的方法。 Boost.Iterator是一组很好的助手,可以使这更容易。

关于c++ - 这是使用基于范围的 for 循环的合理方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13457824/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com