std::remove 是否保留删除的元素,或者它们是否可以被覆盖?

问题描述 投票:0回答:1
int main() {
    std::vector<bool> v(10, false);
    v[0] = true;
    v[1] = true;
    auto end_it = remove(v.begin(), v.end(), true);
    for (int i = 0; i < v.size(); ++i) cout << v[i] << endl;
}

擦除和删除/删除_if算法之间的差异?,我的理解是

v
中的所有元素
true
将被转移到
v
的末尾,但是当我打印上面的内容时,它会打印所有
false
,所以看来我对链接答案的解释不正确。

end_it
v.end()
发生的事情是定义的行为吗?

c++ remove-if
1个回答
0
投票

您在帖子中遗漏的关键是

remove
remove_if
按顺序移动对象

强调我的

move 是字面意思,

remove
remove_if
使用移动操作来更改顺序,并且在将对象移出后,该对象将保持有效但未指定的状态。这意味着返回的迭代器之后的所有元素都有一个未指定的值以及所有通常需要的包袱。

© www.soinside.com 2019 - 2024. All rights reserved.