- 论坛徽章:
- 0
|
回复 93# OwnWaterloo
1. rc4那个源码没时间细看了,出差呢。不过用静态变量不需要考虑怎么恢复,而是要考虑怎么重置。比如一个二维数组遍历的代码:- #include <stdio.h>
- int getNext(int max_i, int max_j){
- static int i, j, call;
- if (max_i == -1){
- i = 0;
- j = 0;
- return;
- }
- for (;i<max_i;i++, j=0){
- for (;j<max_j;){
- printf("%d,%d\n", i, j);
- j++;
- return 0;
- }
- }
- }
- int main(){
- int I;
- getNext(-1,-1);
- getNext(3,3);
- getNext(3,3);
- getNext(3,3);
- getNext(3,3);
- getNext(3,3);
- getNext(3,3);
- getNext(3,3);
- getNext(3,3);
- getNext(3,3);
- getNext(3,3);
- getNext(3,3);
- getNext(3,3);
- return 0;
- }
复制代码 这是一个用静态变量遍历一个二维数组的例子,状态的复杂程度应该和rc4那个代码很接近,比lua那个例子多了几行重置静态变量的代码,但我不觉得真的困难。我之前用类似方法做过遍历图像中所有连通域。
2. generator和coroutine差不多吧,你说的只能遍历的是C++的iterator。generator靠next函数驱动状态转移,跟coroutine的resume类似...晚上回来再说了
|
|