通过创建循环简化一些重复操作的代码

Simplify the codes for some repeated actions by creating loops

本文关键字:操作 代码 创建 循环      更新时间:2023-10-16

这是我的代码执行一系列整数端口的数据重置。

   //note function: void resetData(int pin);
   resetData(p00);
   resetData(p01);
   resetData(p02);
   resetData(p03);
   resetData(p04);
   resetData(p05);
   resetData(p06);
   resetData(p07);
   resetData(p10);
   resetData(p11);
   resetData(p12);
   resetData(p13);
   resetData(p14);
   resetData(p15);
   resetData(p16);
   resetData(p17);
   resetData(p50);
   resetData(p51);
resetData(p80);
resetData(p81);
resetData(p82);
resetData(p83);
resetData(p84);
resetData(p85);
resetData(p86);
resetData(p87);
resetData(p110);
resetData(p111);
resetData(p112);
resetData(p113);
resetData(p114);
resetData(p115);
resetData(p116);
resetData(p117);

在上述代码中,有不同类型的端口(分组在一起),并且由resetData处理。是否可以通过创建一些循环来简化这些长的代码,而无需更改resetData的定义?谢谢!

您可以创建一个在引脚组上起作用的函数:

void myResetData(const std::vector<int> &pins)
{
    for (auto pin : pins)
    {
        resetData(pin);
    }
}

然后,使用它:

void f()
{
    std::vector<int> group1{ p00, p01, p02, p03, p04, p05, p06, p07 },
                     group2{ p10, p11, p12, p13, p14, p15, p16, p17 };
    myResetData(group1);
    myResetData(group2);
}

或仅:

void f()
{
    myResetData(std::vector<int>{ p00, p01, p02, p03, p04, p05, p06, p07 });
    myResetData(std::vector<int>{ p10, p11, p12, p13, p14, p15, p16, p17 });
}

您甚至可以摆脱:

void f()
{
    myResetData({ p00, p01, p02, p03, p04, p05, p06, p07 });
    myResetData({ p10, p11, p12, p13, p14, p15, p16, p17 });
}
int ports[] = {p00,p01,p02,p03,p04,p05,p06,p07,
               p10,p11,p12,p13,p14,p15,p16,p17,
               p50,p51,
               p80,p81,p82,p83,p84,p85,p86,p87,
               p110,p111,p112,p113,p114,p115,p116,p117};
int portsNum = sizeof(ports)/sizeof(*ports);
for(int i=0;i<portsNum;i++)
{
    resetData(ports[i]);
}