只是粗略地了解我想要的东西,或许有人可以填写它和/或告诉我它是否可能。
我想简化我的多重嵌套循环,为此我希望能够调用一个函数(例如使用boost :: filesystem),它返回一个目录中的文件,每次连续调用都会返回下一个文件,直到所有人都筋疲力尽。此外,我希望能够使用向量执行此操作,并使函数返回连续的元素。
有什么想法可以做到这一点?感谢
答案 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 docs和stackoverflow