vector<int> cutTheSticks(vector<int> arr) {
vector<int> a;
int i,min;
int n = arr.size();
a.push_back(n);
while(arr.size() > 0){
min = *min_element(arr.begin(),arr.end());
for(auto j=arr.begin();j!=arr.end();j++){
if(*j == min){
arr.erase(j);
//Problem lies here
}
else{
*j = *j-min;
}
}
a.push_back(arr.size());
}
return a;
}
此函数给出了 SIGSEGV 错误。任何人都可以纠正并告诉我问题吗?
问题出在所选的循环中。
for (auto j = arr.begin(); j != arr.end(); j++) {
if(*j == min){
arr.erase(j);
} else {
*j = *j - min;
}
}
假设j
指向数组中的最后一个元素,即它是arr.end() - 1
。在arr.erase(j);
迭代器j
无效并且j++
在下一次迭代中是未定义的行为之后,它可能会j
落后于arr.end()
。更正如下循环
auto j = arr.begin();
while (j != arr.end()) {
if(*j == min){
j = arr.erase(j);
} else {
*j = *j - min;
++j;
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句