c++vector<vector <da>> vAA, 如何循环删除指定结构体元素vector <da>,写出完整代码
时间: 2023-08-10 07:04:11 浏览: 132
假设你有一个 `vector<vector<da>>` 类型的容器 `vAA`,其中 `da` 是一个结构体类型。你可以使用以下代码循环删除指定结构体元素 `vector<da>`:
```c++
#include <iostream>
#include <vector>
using namespace std;
struct da {
int value;
};
int main() {
vector<vector<da>> vAA = {{{{1}, {2}}, {{3}, {4}}}, {{{5}, {6}}, {{7}, {8}}}}; // 一个示例容器
int target_value = 3; // 假设你要删除值为 3 的元素
// 循环删除元素
for (auto it = vAA.begin(); it != vAA.end(); ) {
auto &v = *it;
auto remove_it = v.end();
for (auto it2 = v.begin(); it2 != v.end(); ++it2) {
if (it2->value == target_value) {
remove_it = it2;
break;
}
}
if (remove_it != v.end()) {
v.erase(remove_it);
}
else {
++it;
}
}
// 输出结果
for (auto &v : vAA) {
for (auto &d : v) {
cout << d.value << " ";
}
cout << endl;
}
return 0;
}
```
在上面的代码中,我们使用了两个循环来遍历 `vector<vector<da>>` 中的每个元素。外层循环遍历每个 `vector<da>`,内层循环遍历每个 `da`。如果遇到值为 `target_value` 的 `da`,则将其从 `vector<da>` 中删除,否则继续遍历。如果整个 `vector<da>` 中没有值为 `target_value` 的 `da`,则将其从 `vector<vector<da>>` 中删除。
需要注意的是,在循环中我们使用了迭代器来遍历元素,因为我们需要在循环中修改容器中的元素。此外,在循环中我们使用了引用 `&` 来修改元素,因为 `auto` 推导出的类型是 const 引用,无法修改元素。
阅读全文