请问为什么被remove后不应该是把3排到最后面吗?为什么会多出来一个7和8?
vector<int> numbers = { 1, 2, 3, 4, 5, 3, 6, 7, 8, 3 };
remove(numbers.begin(), numbers.end(), 3);
for (auto num : numbers) {
cout << num << " ";
}
请问为什么被remove后不应该是把3排到最后面吗?为什么会多出来一个7和8?
vector<int> numbers = { 1, 2, 3, 4, 5, 3, 6, 7, 8, 3 };
remove(numbers.begin(), numbers.end(), 3);
for (auto num : numbers) {
cout << num << " ";
}
参考通义千问和郭老师的小迷弟雅思莫了-编写提供,主要是为了帮助您快速解决问题,如下回答,您可以参考下,如有问题,评论区留言。
std::remove
函数并不是直接在原容器中删除元素,而是在保持原有元素内存顺序的前提下,将需要移除的元素移动到容器末尾,并返回新范围的有效结尾。因此,在执行remove(numbers.begin(), numbers.end(), 3);
之后,所有值为3的元素会被移动到vector的末尾,但它们仍然占据着vector的空间。
所以当你遍历整个vector时(包括那些被标记为“应被移除”的位置),你会看到这样的输出:
1 2 4 5 6 7 8 3 3 3
如果你希望移除元素后实际减少容器大小,你应该使用std::vector::erase
函数与std::remove
配合,如下所示:
numbers.erase(remove(numbers.begin(), numbers.end(), 3), numbers.end());
这样,erase
会从原始容器中真正移除remove
标记的元素,最终得到不包含值3的vector。