//反向迭代器删除偶数元素 vector<int> rit; for(auto rit = v.rbegin(); rit!= v.rend();rit++) { if(*rit % 2 == 0){ v.erase((++rit).base()); //由于是反向迭代器删除,所以要进行位置转换成正向的 }else{ ++rit; } } cout<<*rit<<endl; return 0;这个代码哪里错了
时间: 2024-03-23 19:42:49 浏览: 19
该代码中存在两个问题:
1. 在使用反向迭代器时,不能直接使用 `v.erase()` 删除元素,需要使用 `++rit` 将迭代器向前移动一个位置,再使用 `base()` 函数将反向迭代器转换成正向迭代器,最后使用 `v.erase()` 删除元素。
2. 在最后输出 `*rit` 的时候,由于 `rit` 已经到达 `v.rend()`,所以无法输出正确的值。应该在循环结束后,使用正向迭代器输出 `v` 中的元素。
下面是修改后的代码:
```c++
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v{1, 2, 3, 4, 5, 6, 7, 8, 9};
for (auto rit = v.rbegin(); rit != v.rend(); ) {
if (*rit % 2 == 0) {
rit = vector<int>::reverse_iterator(v.erase((++rit).base()));
} else {
++rit;
}
}
for (auto it = v.begin(); it != v.end(); ++it) {
cout << *it << " ";
}
cout << endl;
return 0;
}
```
该代码的输出结果为:
```
1 3 5 7 9
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.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)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)