当试图从向量中移除元素时,如果我使用另一个变量作为值,则答案与直接向量索引不同



我是一个初学者,一直被困在这里,为什么尽管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]的元素的引用,它可能会有意外的行为。

最新更新