相当简单,我想循环遍历一个数组的每个索引,arraysize只使用一个var作为循环.我有办法有两个瓦尔做i和j,其中i跟踪实际的指数和周围循环和j计数到ARRAYSIZE和终止循环:
for (unsigned int i = start, j = 0; //start is the starting index
j < arraysize;
++i == arraysize ? i = 0 : 0, ++j)
{
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
只有一些漂亮的方法来做到这一点i吗?如果由于某种原因后向迭代是有意义的,顺序无关紧要.
澄清:我想从循环start到arraysize - 1,然后0到start - 1.
至少根据我的理解,你想要遍历整个阵列,但是你想要从开头以外的某个地方开始,然后当你到达终点时,你想要从头开始并继续前进直到你到达原始起点.
假设这是正确的,这很容易:
for (size_t i=0; i<arraysize; i++)
process(array[(i+start)%arraysize]);
Run Code Online (Sandbox Code Playgroud)
我宁愿将该算法抽象为泛型函数(甚至可以在类似的东西上工作std::forward_list),而不需要做多余的模数和加法运算(尽管在许多情况下它们可能是可接受的):
#include <algorithm>
#include <iostream>
#include <iterator>
template<typename FwdIter, typename F>
F for_each_shifted(FwdIter first, FwdIter start, FwdIter last, F f)
{
using std::for_each;
return for_each(first, start, for_each(start, last, f));
}
int main()
{
using namespace std;
int v[] = { 1, 1, 2, 6, 24 };
for_each_shifted(begin(v), begin(v) + 3, end(v), [](int x)
{
cout << x << endl;
});
}
Run Code Online (Sandbox Code Playgroud)
输出是:
6
24
1
1
2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
547 次 |
| 最近记录: |