【发布时间】:2014-08-22 15:26:17
【问题描述】:
考虑以下情况
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 因为我知道它一直到擦除功能。但看起来擦除功能不起作用,因为我为它们两个获得了相同的值。我不太确定这里发生了什么以及是什么原因造成的。各位大神能帮我看看这有什么问题吗?
【问题讨论】:
-
validPorts是如何传递给second()的?按价值?通过参考? -
你的代码很好,你用的是什么编译器?
-
您实际上是否将
some_int_value插入到集合中?换句话说,对于某些j,some_condition_A的计算结果是否为真? -
@PiotrS。嘿,我认为 CashCow 已经添加了缺失的信息 :-) 对不起,我错过了。我实际上是在使用带有 gcc 3.4 的 systemC 编译器 2.3
-
@AntonSavin 是的,我已经检查过了。插入部分工作正常,它的擦除部分给我带来了问题
标签: c++ erase unordered-set