vector<tuple<float, int, int>> new_corr; vector<int> selected_ind; short ind; for(i=0; i<num; ++i) { ind = y[i]; if(S[ind]<0.0001) break; if(flag_latent[get<1>(corr[ind])] == 1 | flag_rolled[get<2>(corr[ind])] == 1) continue; if(i==0) { selected_ind.push_back(ind); new_corr.push_back(make_tuple(get<0>(corr[ind]),get<1>(corr[ind]),get<2>(corr[ind]))); flag_latent[get<1>(corr[ind])] = 1; flag_rolled[get<2>(corr[ind])] = 1; } else { int found =0; for(j=0;j<selected_ind.size(); ++j) { if(H[ind*num+selected_ind[j]]<0.00001) { found = 1; break; } } if(found==0) { selected_ind.push_back(ind); new_corr.push_back(make_tuple(get<0>(corr[ind]),get<1>(corr[ind]),get<2>(corr[ind]))); flag_latent[get<1>(corr[ind])] = 1; flag_rolled[get<2>(corr[ind])] = 1; } } }
时间: 2024-04-13 21:27:08 浏览: 59
U201814655-CS1806-杨雨鑫-第19章编程题1
这段代码主要是根据一些条件筛选出一部分元素,并将它们存储在`new_corr`和`selected_ind`向量中。
首先,定义了一个`new_corr`向量,其中元素的类型为`tuple<float, int, int>`,以及一个`selected_ind`向量,用于存储选中的元素的索引。
然后,定义了一个`short`类型的变量`ind`,用于临时存储索引值。
接下来,通过一个循环遍历`num`次,进行元素的筛选和添加操作。
在循环中,首先将`y[i]`赋值给变量`ind`,表示当前迭代的索引。然后判断向量`S[ind]`的值是否小于`0.0001`,如果是,则跳出循环。
接着,通过一系列条件判断语句进行筛选。如果满足某个条件,则跳过当前元素的处理,进入下一次循环。
如果是第一个元素(即`i==0`),则将其索引`ind`添加到`selected_ind`向量中,并将对应的元素`(get<0>(corr[ind]), get<1>(corr[ind]), get<2>(corr[ind]))`添加到`new_corr`向量中。
同时,将对应的标志位`flag_latent[get<1>(corr[ind])]`和`flag_rolled[get<2>(corr[ind])]`设置为1,表示已经处理过该元素。
如果不是第一个元素,进入`else`分支,通过一个内层循环遍历`selected_ind`向量中的元素。
在内层循环中,判断矩阵`H[ind*num+selected_ind[j]]`的值是否小于`0.00001`,如果是,则将标志位`found`设置为1,并跳出内层循环。
如果内层循环结束后,`found`仍为0,说明当前元素满足条件,将其索引`ind`添加到`selected_ind`向量中,并将对应的元素`(get<0>(corr[ind]), get<1>(corr[ind]), get<2>(corr[ind]))`添加到`new_corr`向量中。
同时,将对应的标志位`flag_latent[get<1>(corr[ind])]`和`flag_rolled[get<2>(corr[ind])]`设置为1。
整个循环的目的是根据一些条件筛选出满足特定要求的元素,并将它们存储在`new_corr`和`selected_ind`向量中。
阅读全文