理解 std::remove 的功能
在 C 中,std::remove 算法对由两个前向表示的任意序列进行操作迭代器。其目的是重新排列序列中的元素,将不匹配的元素向前移动。与 std::erase 不同,remove 不会从容器中物理删除元素。相反,它会重新组织它们。
示例
考虑以下代码片段:
std::vector<int> a; a.push_back(1); a.push_back(2); std::remove(a.begin(), a.end(), 1); std::vector<int>::iterator iter = a.begin(); std::vector<int>::iterator endIter = a.end(); std::cout << "Using iter...\n"; for (; iter != endIter; ++iter) { std::cout << *iter << "\n"; } std::cout << "Using size...\n"; for (int i = 0; i < a.size(); ++i) { std::cout << a[i] << "\n"; }
输出将为:
Using iter... 2 2 Using size... 2 2
虽然remove有效地将元素2向前移动,但向量的大小保持不变为2,因为未初始化的内存尚未被删除。
Erase-Remove Idiom
擦除-删除习惯用法结合了删除和擦除来物理删除不需要的元素。代码:
a.erase(std::remove(a.begin(), a.end(), 1), a.end());
将从向量中删除元素 1 并将其大小减小到 1。
std::remove
虽然remove的主要用途是在擦除-删除习惯用法中,但它也可以用于其他情况,例如:以上是C 函数中的 std::remove 如何实现,std::remove 和 std::erase 有什么区别?的详细内容。更多信息请关注PHP中文网其他相关文章!