隐藏函数中的迭代

时间:2011-03-14 23:02:09

标签: c++ function boost vector iterator

只是粗略地了解我想要的东西,或许有人可以填写它和/或告诉我它是否可能。

我想简化我的多重嵌套循环,为此我希望能够调用一个函数(例如使用boost :: filesystem),它返回一个目录中的文件,每次连续调用都会返回下一个文件,直到所有人都筋疲力尽。此外,我希望能够使用向量执行此操作,并使函数返回连续的元素。

有什么想法可以做到这一点?感谢

3 个答案:

答案 0 :(得分:1)

使用Iterator模式。在Java中你会像这样:

class FileIterator {
  private int index;
  private File[] files;

  public FileIterator(File[] files) {
    this.files = files;
    this.index = 0;
  }

  public boolean hasNext() {
    if (index < files.length - 1) { 
      return true;
    } else {
      return false;
    }
  }
  public File next() {
    return this.files [index ++];
  }
}

你可以这样使用它:

FileIterator it = new FileIterator(theFiles);
while (it.hasNext()) {
  File f = it.next();
}

答案 1 :(得分:1)

创建一个仿函数:一个像函数一样被调用的对象。

该对象将保存查询结果和查询的当前状态。您定义了一个operator(),因此可以像调用该函数一样调用该对象。每次调用此函数时,都会返回一个结果并更新对象的内部状态。

实施例

#include <iostream>

using namespace std;

class CountDown {
        unsigned count;
public:
        CountDown(unsigned count) : count(count) {}
        bool operator()() { return count-- > 0; }
};

int main()
{
        CountDown cd(5);
        while( cd() ) {
                cout << "Counting" << endl;
        }
        return 0;
}

答案 2 :(得分:1)

您可以使用BOOST_FOREACH简化循环link to docsstackoverflow