zoukankan      html  css  js  c++  java
  • 多重循环 如何 转换 成一个迭代器

    最近有一个问题,要实外汇交易策略的优化问题。问题很简单:配置n 个参数,这n 个参数都取一定的范围,找出最优的参数组合。

    比如:

    a  = [0, 10]  (从 0, 10, a 是整数)

    b = [20, 30]

    当然,解决方案很简单,用一个两个for 循环就可以了。就可以求出所有的组合情况了。

    当然,问题的需求没有这样简单:

    1. 参数可能会很多个,比如 有10个。这样循环会写的很难看。(深度太深)

    2. 参数的个数不是固定的,可能是一个,也可能是两个,所以,你没有办法知道要写多少个循环。

    循环问题,当然是分装成一个迭代器比较好。这样,业务逻辑,可以和循环可以分开了。

    当然,这个问题很简单,最好大家先不要看答案,自己动手写一下。我总感觉我的解决方案

    不是非常的完美。虽然,结构还是挺清晰的。

    接口是这样的:

    一个

    begin 函数。迭代器初始化

    next 函数。迭代过程。如果迭代结束,返回0

    代码
    #include <stdio.h>

    #define MAX_CYCLE_LEVEL 10

    typedef 
    struct Range
    {
        
    int start;
        
    int end;
        
    int step;
    } Range;

    typedef 
    struct CycleIteratorResult
    {
        
    int items[MAX_CYCLE_LEVEL];
        
    int n;
    } CycleIteratorResult;

    int CycleBegin(Range *r, int n, CycleIteratorResult *result)
    {
        
    int i;
        
    int p = n - 1;
        result
    ->= n;
        
    for (i = 0; i< n; i++) {
            result
    ->items[i] = (r + i)->start;
        }
        result
    ->items[p] = (r + p)->start - (r + p)->step;
        
    return 0;
    }

    int CycleNext(Range *r, int n, CycleIteratorResult *result)
    {
        
    int p = n - 1;
        
    while (p >= 0 && (result->items[p] += (r + p)->step) > (r + p)->end) {
            result
    ->items[p] = (r + p)->start;
            p
    --;
        }
        
    if (p == -1return 0;
        
    return 1;
    }

    int main()
    {
        Range r[] 
    = {{031}, {471}, {8201}};
        
    int n = sizeof(r) / sizeof (Range);
        
    int m;

        CycleIteratorResult result;
        CycleBegin(r, n, 
    &result);
        
    while(CycleNext(r, n, &result)) 
        {
            
    for (m = 0; m < result.n; m++
            {
                printf(
    "%d ", result.items[m]);
            }
            putchar(
    '\n');
        }
    }
  • 相关阅读:
    MVC中单选按钮的实现
    前端点击手机号码跳转到手机拨号页面
    jQuery限制文本框只能输入正整数
    Asp.Net 之 二维码生成
    MVC +Jqyery+Ajax 实现弹出层提醒
    jQuery Ajax使用实例
    ASP的调试技术解答
    模式应用场景
    redis笔记
    yii resful
  • 原文地址:https://www.cnblogs.com/niniwzw/p/1703654.html
Copyright © 2011-2022 走看看