在几个IF条件下编码或SWITCH-CASE可能在这里好吗?

sli*_*nga 2 c++ if-statement

我有一个vector<ClassA>(比如my_vector,这个ClassA本身就是ClassB的向量),我想写if condition一下来测试这样的条件

(1).如果只有一个元素不为空而其他元素都为空,(因为my_vector的大小为5,我应该一个接一个地测试这个非空的一个元素的情况,例如my_vector [0],my_vector [1],.. )

(2)同样,如果两个元素不为空而其他元素为空(类似于其他对)

(3)类似地,三个或更多个元素不是空的

我在想如何编码

这是我的尝试

if (!my_vector[0].empty() && my_vector[1].empty() && my_vector[2].empty() && .. &&  
         my_vector[4].empty()){ //process 1}
else if (!my_vector[1].empty() && my_vector[0].empty() && my_vector[2].empty() && ..){ 
         //process 2}
else if(!my_vector[2].empty() && my_vector[0].empty() && my_vector[1].empty() && ..){
        //process 3}
...
...

else if (!my_vector[0].empty() && !my_vector[1].empty() && my_vector[2].empty() && ..   
         my_vector[4].empty()){ //process n}
else if (!my_vector[0].empty() && !my_vector[2].empty() && my_vector[1].empty() && ..   
         my_vector[4].empty()){ //process n+1}
....
....
else if (!my_vector[0].empty() && !my_vector[1].empty() && !my_vector[2].empty() &&    
         my_vector[3].empty() && my_vector[4].empty()){ //process p}
....
like wise
Run Code Online (Sandbox Code Playgroud)

这是非常难以测试的方法,任何有条不紊的方法来做到这一点. 提前致谢.

Sir*_*ius 6

使用from 和lambda 的count_if模板函数<algorithm>,您将获得一个紧凑而清晰的解决方案:

unsigned int non_empties = std::count_if(myvector.begin(), myvector.end(), [](const ClassA & c) { 
     return !c.empty();
});

if (non_empties == 1) {
  // process 1
} else if (non_empties == 2) {
  // process 2
} else if (non_empties >= 3) {
  // process 3
}
Run Code Online (Sandbox Code Playgroud)

<algorithm>库是出奇的人往往被忽视,而它提供了这样的真正实用的解决方案.