假设我有一个带有bool字段的结构
struct pBanana {
bool free;
};
现在我有另一个包含pBanana struct
矢量的结构struct handler_toto {
std::vector<pBanana > listBananas;
};
现在我想回复listBananas中布尔值免费错误的次数
int someFunction (mainHandler& gestionnaire)
{
return std::count(gestionnaire.listBananas.begin(), gestionnaire.listBananas.end(), gestionnaire.listBananas.operator[/*How to do it here */]);
}
在咨询documentation后,我无法理解如何在我的案例中正确使用operator[]
答案 0 :(得分:2)
那是因为您无法使用operator[]
来执行此操作。
您可以使用std::count_if
(不是count
)和 lambda函数 a.k.a. 匿名函数执行此操作:
return std::count_if(
gestionnaire.listBananas.begin(),
gestionnaire.listBananas.end(),
[](const pBanana &b) {return b.free;});
std::count_if
会为列表中的每个项目调用您的函数,并计算它返回的次数true
。
答案 1 :(得分:1)
使用std::count_if()
,就像在immibis的回答中所证明的那样,是最好的选择。
要回答您的问题,要正确使用operator[]
,您必须手动遍历矢量,例如:
int someFunction (mainHandler& gestionnaire) {
int count = 0;
std::vector<pBanana> &bananas = gestionnaire.listBananas;
size_t size = bananas.size();
for(size_t i = 0; i < size; ++i) {
if (!bananas[i].free) // <-- operator[] called here
++count;
}
return count;
}
或者,您可以使用迭代器而不是使用operator[]
:
int someFunction (mainHandler& gestionnaire) {
int count = 0;
std::vector<pBanana> &bananas = gestionnaire.listBananas;
for(std::vector<pBanana>::iterator iter = bananas.begin(); iter != bananas.end(); ++iter) {
if (!iter->free)
++count;
}
return count;
}