你可以在while语句中迭代一个向量吗?

时间:2018-04-04 06:00:55

标签: c++ while-loop

有没有办法迭代while语句中的向量?

例如:

int R; // number of r types
int T; // number of instances
std::vector<double> r_max (R); // maximum value for each r type
std::vector<std::vector> > r_use (T, std::vector<double>(R)); // value for each instance of each r type

while(all instances of each r type is greater than its corresponding r_max value){
    run_function(r_use);
}

我想要它的长版本是:

int R; // number of r types
int T; // number of instances
std::vector<double> r_max (R); // maximum value for each r type
std::vector<std::vector<double> > r_use (T, std::vector<double>(R)); // value for each instance of each r type

bool flag = false;

while(!flag){
    flag = true;
    for (int r = 0; r < R && flag; ++r){
        for (int t = 0; t < T && flag; ++t){
            if (r_use[t][r] > r_max[r]){
                flag = false;
            }
        }
    }
    if (!flag){
        run_function(r_use);
    }
}

有没有办法在one while语句中执行此操作?或者我是否需要迭代所有实例和类型?

1 个答案:

答案 0 :(得分:0)

你可以写一个函数来做这个(这里我使用lambda,你也可以使用普通函数)

auto condition=[&]{
   for(auto& r:r_use)
      for(int i=0;i<R;++i)
         if(r[i]<=r_max[i])
            return false;
   return true;
};
while(condition())run_function(r_use);

或者您可以(最好不要)使用这样的算法库(只需实现您的第一个剪辑)

while(std::all_of(r_use.begin(),r_use.end(),[&r_max](auto& rs){
         return std::all_of(rs.begin(),rs.end(),[&,start=rs.data()](auto& d){ 
            return d>r_max[&d-start];});})
)run_function(r_use);