考虑以下情况
void first(){
unordered_set<int> validPorts;
int roundNum=0, preFunctionSize, postFunctionSize,j=0 ;
while(j <100){
if(some_condition_A){
validPorts.insert(some_int_value);
}
j++;
}
do{
preFunctionSize = validPorts.size();
second( validPorts, some_int_value );
postFunctionSize = validPorts.size();
}while(roundNum<12);
}
void second( unordered_set<int> & validPorts, int some_int_value ){
for (auto it = validPorts.begin(); it != validPorts.end();) {
if (it == validPorts.find(some_int_value)) {
validPorts.erase(it++); // <== CODE enters here, I checked
} else {
++it;
}
}
}
所以我希望postFunctionSize应该小于preFunctionSize,因为我知道它直到擦除功能。但看起来擦除功能不起作用,因为我得到两个相同的值。我不确定这里发生了什么以及导致它的原因。你能帮我解决一下这可能有什么问题吗?
答案 0 :(得分:0)
您的代码当然是伪的,但您需要这样做:
it = validPorts.erase( it );
在一个循环中,你在迭代一个集合中删除它们中的一些。
然而,这也不是你想要做的。您正试图从unordered_set
中删除值,所以只需执行
validPorts.erase( some_int_value );
没有循环。