c++ 迭代器删除元素
时间: 2023-11-03 15:21:44 浏览: 185
你可以使用迭代器来删除元素,具体步骤如下:
1. 首先,使用迭代器遍历容器,找到要删除的元素。
2. 调用迭代器的 erase() 函数来删除该元素。
3. 注意,在调用 erase() 函数后,迭代器会失效,所以需要更新迭代器。
4. 最后,继续遍历容器完成操作。
以下是一个示例代码,演示如何使用迭代器删除容器中的元素:
```cpp
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
// 使用迭代器遍历容器
for (auto it = vec.begin(); it != vec.end(); ) {
if (*it == 3) {
// 删除元素
it = vec.erase(it);
} else {
// 更新迭代器
++it;
}
}
// 输出结果
for (const auto& num : vec) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
```
运行上述代码,输出将为:1 2 4 5,其中元素 3 被成功删除。请注意,在使用迭代器删除元素时要小心处理迭代器的有效性,以避免出现错误。
相关问题
vector迭代器删除元素
在C++中,可以使用迭代器来删除vector中的元素,以防止迭代器失效。下面是一个示例代码,演示了如何使用迭代器删除vector中的元素[^1]:
```cpp
#include <iostream>
#include <vector>
int main() {
std::vector<int> vect;
vect.push_back(1);
vect.push_back(2);
vect.push_back(3);
vect.push_back(4);
vect.push_back(5);
// 使用迭代器遍历vector并删除指定元素
for (auto it = vect.begin(); it != vect.end(); ) {
if (*it == 3) {
it = vect.erase(it);
} else {
++it;
}
}
// 输出删除元素后的vector
for (auto num : vect) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
```
运行上述代码,输出结果为:
```
1 2 4 5
```
这段代码首先创建了一个包含1、2、3、4、5的vector。然后使用迭代器遍历vector,并在遍历过程中删除值为3的元素。最后,输出删除元素后的vector。
迭代器删除list元素
在使用迭代器删除list元素时需要注意以下几点:
1. 不能在循环中直接删除元素,因为删除元素后会改变list的大小,可能会导致迭代器指向错误的位置,从而导致程序崩溃。
2. 删除元素后,迭代器会失效,需要重新获取迭代器。
下面是一个示例代码,演示如何使用迭代器删除list元素:
```c++
#include <iostream>
#include <list>
int main() {
std::list<int> myList = {1, 2, 3, 4, 5};
// 获取迭代器
auto it = myList.begin();
// 循环遍历list
while (it != myList.end()) {
// 删除元素
if (*it == 3) {
it = myList.erase(it);
} else {
++it;
}
}
// 输出剩余的元素
for (auto it = myList.begin(); it != myList.end(); ++it) {
std::cout << *it << " ";
}
return 0;
}
```
在上面的代码中,我们先获取list的迭代器,然后使用while循环遍历list,如果当前元素等于3,则使用erase函数删除元素,并将迭代器指向删除元素后的下一个元素;否则,将迭代器指向下一个元素。最后,使用for循环输出剩余的元素。