有没有办法迭代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语句中执行此操作?或者我是否需要迭代所有实例和类型?
答案 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);