如果想要遍历一个vector并且删除vector中的元素如何实现,用for (auto &it1 :vector)
时间: 2024-05-04 16:20:07 浏览: 12
使用 for (auto &it1 :vector) 遍历 vector 并删除元素是一种常见的错误做法,因为在遍历过程中修改 vector 的大小会导致迭代器失效,可能会导致程序崩溃或者出现不可预期的行为。
正确的做法是使用迭代器遍历 vector,并使用 erase() 函数删除元素,如下所示:
```
vector<int> vec = {1, 2, 3, 4, 5};
for (auto it = vec.begin(); it != vec.end(); ) {
if (*it % 2 == 0) {
it = vec.erase(it); // 删除偶数元素,并更新迭代器
} else {
++it; // 如果不删除,则更新迭代器
}
}
```
在这个例子中,我们使用迭代器遍历 vector,如果当前元素为偶数,则使用 erase() 函数删除该元素,并更新迭代器,否则只更新迭代器。
需要注意的是,在使用 erase() 函数删除元素时,需要将迭代器指向被删除元素的下一个元素。否则,如果只是简单地使用 ++it 更新迭代器,可能会导致某些元素被遍历多次或者被遗漏。
相关问题
std::vector 遍历出指定元素后从 vector 中删除该元素
在 C++ 中,可以使用 std::vector 的 erase() 函数来删除 vector 中的元素,配合迭代器可以删除指定元素。
例如,我们要遍历 vector,找到值为 3 的元素并删除:
```cpp
std::vector<int> vec = {1, 2, 3, 4, 5};
for (auto it = vec.begin(); it != vec.end(); ++it) {
if (*it == 3) {
vec.erase(it);
break;
}
}
```
上述代码中,我们使用迭代器遍历 vector 中的元素,当找到值为 3 的元素时,使用 erase() 函数删除该元素,并使用 break 跳出循环。
需要注意的是,使用 erase() 函数删除元素后,原来的迭代器会失效,因此要在 erase() 函数之前先保存该元素的迭代器,以便后续使用。
如果要删除 vector 中所有值为 3 的元素,可以使用 std::remove() 函数结合 erase() 函数:
```cpp
std::vector<int> vec = {1, 2, 3, 4, 5, 3};
vec.erase(std::remove(vec.begin(), vec.end(), 3), vec.end());
```
上述代码中,我们使用 std::remove() 函数将所有值为 3 的元素移动到 vector 的末尾,并返回移动后的新的“逻辑”结尾迭代器,然后使用 erase() 函数删除新的“逻辑”结尾迭代器之后的所有元素。
遍历一个vector容器取出元素
可以使用循环来遍历一个`vector`容器并取出其中的元素。以下是一个示例代码:
```cpp
#include <iostream>
#include <vector>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
// 使用for循环遍历vector并取出元素
for (int i = 0; i < numbers.size(); i++) {
std::cout << numbers[i] << " ";
}
std::cout << std::endl;
// 使用迭代器遍历vector并取出元素
for (auto it = numbers.begin(); it != numbers.end(); ++it) {
std::cout << *it << " ";
}
std::cout << std::endl;
// 使用范围-based for循环遍历vector并取出元素
for (const auto& num : numbers) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
```
以上代码使用了三种不同的方法来遍历`vector`容器并打印出其中的元素。可以根据自己的需求选择其中一种或多种方法。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)