我是一个初学者,一直被困在这里,为什么尽管val=vec[0]答案不同。如有任何帮助,我们将不胜感激。提前谢谢。
vector<int>vec;
vec={1,2,1,3,1,3};
int val=vec[0];
vec.erase(remove(vec.begin(),vec.end(),val),vec.end());
for(auto it=vec.begin();it!=vec.end();it++)
{
cout<<*it<<" ";
}
//Output:2 3 3
//Now if we change val to vec[0] then output changes.
vec={1,2,1,3,1,3};
vec.erase(remove(vec.begin(),vec.end(),vec[0]),vec.end());
for(auto it=vec.begin();it!=vec.end();it++)
{
cout<<*it<<" ";
}
//Output:2 1 3 1 3
std::remove
通过引用获取要移除的值,并对该范围内的元素执行修改(移位(。这意味着作为vec[0]
传递的范围中的元素可能会被修改,然后不会给出预期的最终结果。
因为std::remove通过引用获取值,所以如果它是对范围[first,last]的元素的引用,它可能会有意外的行为。