我有一个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)
这是非常难以测试的方法,任何有条不紊的方法来做到这一点. 提前致谢.
使用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>库是出奇的人往往被忽视,而它提供了这样的真正实用的解决方案.
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |