iterator erase
时间: 2023-10-21 08:21:19 浏览: 39
`iterator erase` 是 C++ 中用于删除容器中元素的函数。它通常与迭代器配合使用,用于在容器中删除特定位置的元素。
在 C++ 标准库中,各种容器(如 vector、list、set、map 等)都提供了 `erase` 函数来删除元素。这些容器的 `erase` 函数通常接受一个迭代器参数,用于指定要删除的元素位置。
以下是一个示例,展示如何使用 `erase` 函数删除 vector 中的元素:
```cpp
#include <iostream>
#include <vector>
int main() {
std::vector<int> nums {1, 2, 3, 4, 5};
// 删除第三个元素
auto it = nums.begin() + 2;
nums.erase(it);
// 输出剩余元素
for (const auto& num : nums) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
```
运行以上代码,将输出 `1 2 4 5`,即删除了第三个元素 3。
需要注意的是,在删除元素后,原来的迭代器可能会失效。因此,在删除元素后,应该重新获取有效的迭代器,而不是继续使用被删除的迭代器。
总结起来,`iterator erase` 是 C++ 标准库中用于删除容器中元素的函数,通过给定迭代器的位置来指定要删除的元素。
相关问题
iterator erase(iterator first, iterator last)实现
`iterator erase(iterator first, iterator last)` 是 C++ STL 中 `std::vector` 容器的成员函数之一,它的作用是删除容器中从 `first` 到 `last`(不包括 `last`)这段区间内的所有元素,并返回指向最后一个被删除元素的下一个元素的迭代器。
实现时,可以使用循环来依次删除区间内的元素,具体实现如下:
```c++
iterator erase(iterator first, iterator last) {
for (iterator it = first; it != last; ++it) {
it = v.erase(it);
--it;
}
return last;
}
```
其中,`v.erase(it)` 表示删除迭代器 `it` 指向的元素,并返回指向被删除元素下一个元素的迭代器,所以在循环中需要将 `it` 向前移动一个位置。最后返回的是传入的 `last` 迭代器,即删除区间的下一个元素迭代器。
vector erase
在C++中,vector的erase函数用于删除vector中的元素。它有两种形式:
1. iterator erase(iterator position):删除指定位置的单个元素。2. iterator erase(iterator first, iterator last):删除指定范围内的一段元素。
在提供的引用中,第一个示例中使用的是第一种形式,即通过指定迭代器来删除元素,但这样做可能会导致迭代器失效,可能产生错误。为了避免这种情况,应该使用第二种形式,并将erase函数的返回值赋给迭代器,以保证迭代器的有效性。
所以正确的用法应该是:
for(vector<int>::iterator iter=veci.begin(); iter!=veci.end(); ) {
if( *iter == 3)
iter = veci.erase(iter);
else
++iter;
}