📅  最后修改于: 2023-12-03 14:47:42.696000             🧑  作者: Mango
在 C++ 中,std::remove 和 vector::erase 都用于删除容器中的元素。然而,它们之间有一些重要的区别。
std::remove 属于算法(algorithm)组件的一部分,定义在
template< class ForwardIt, class T >
ForwardIt remove( ForwardIt first, ForwardIt last, const T& value );
其中,first 和 last 表示元素范围,T& value 表示要删除的值。
例如:
std::vector<int> vec{ 1, 2, 3, 4, 5 };
auto new_end = std::remove(vec.begin(), vec.end(), 3); // 返回 new_end 指向 vec 中值为 3 的最后一个元素的下一个位置
vec.erase(new_end, vec.end()); // 删除 [new_end, vec.end()) 范围的所有元素,即删除 vec 中的 3
vector::erase 函数属于 vector 容器的一部分,定义在
iterator erase( const_iterator pos ); // 删除 pos 所指向的元素
iterator erase( const_iterator first, const_iterator last ); // 删除 [first, last) 范围内的所有元素
其中,pos 表示要删除的元素的迭代器,first 和 last 表示要删除的元素的范围。
例如:
std::vector<int> vec{ 1, 2, 3, 4, 5 };
vec.erase(std::remove(vec.begin(), vec.end(), 3), vec.end()); // 删除 vec 中所有值为 3 的元素
因此,在删除容器中的元素时,应该根据需要选择 std::remove 或 vector::erase 函数来达到最佳效果。