vector<vector<结构体>>
时间: 2023-10-15 17:04:26 浏览: 83
这是一个二维 vector,每个元素是一个 vector,而每个 vector 中的元素都是一个结构体。可以用以下方式定义和访问:
```c++
#include <vector>
struct MyStruct {
int x;
int y;
};
int main() {
std::vector<std::vector<MyStruct>> my_vec;
// 添加元素
std::vector<MyStruct> inner_vec;
inner_vec.push_back({1, 2});
inner_vec.push_back({3, 4});
my_vec.push_back(inner_vec);
// 访问元素
std::cout << my_vec[0][0].x << ", " << my_vec[0][0].y << std::endl; // 输出 1, 2
return 0;
}
```
这里我们定义了一个 `MyStruct` 结构体,包含两个整型成员变量 `x` 和 `y`。然后定义一个二维 vector `my_vec`,其中每个元素都是一个 vector,而每个 vector 中又存储了若干个 `MyStruct` 类型的元素。我们可以通过 `my_vec[i][j]` 的方式来访问二维 vector 中的元素。
相关问题
c++ 如何删除vector<vector <>> 指定结构体元素vector <>
如果你想删除一个 `vector<vector<>>` 中的某个指定结构体元素 `vector<>`,你可以使用 C++ 中的 `erase` 函数来实现。
首先,你需要找到要删除的元素的位置。假设你要删除的元素是 `my_vector` 中的第 `i` 个元素,那么你可以使用以下代码来获取要删除的元素的迭代器:
```c++
auto it = my_vector.begin() + i;
```
接下来,你可以使用 `erase` 函数来删除这个元素。如果这个元素是一个 `vector<>`,那么你需要传递两个迭代器,分别表示该 `vector<>` 的开始和结束位置。因此,你可以使用以下代码来删除该元素:
```c++
my_vector.erase(it, it + 1);
```
这个函数会删除 `my_vector` 中从 `it` 开始的 1 个元素,也就是你要删除的那个元素。注意,这个函数返回一个迭代器,指向被删除元素的下一个元素。由于你只删除了一个元素,因此这个迭代器应该等于 `my_vector.begin() + i`。
c++ 如何循环删除vector<vector <>> 指定结构体元素vector <>
如果你要循环删除 `vector<vector<>>` 中的指定结构体元素 `vector<>`,你可以使用 `remove_if` 函数和 `erase` 函数来实现。
`remove_if` 函数是一个常见的算法函数,它接受一个范围和一个谓词函数,并将满足谓词函数的元素移到容器的末尾,并返回指向新的末尾的迭代器。注意,`remove_if` 并不会真正删除元素,它只是将不需要的元素移到了容器的末尾。
接下来,你可以使用 `erase` 函数来删除这些不需要的元素。如果这些元素是 `vector<>`,那么你需要传递两个迭代器,分别表示每个 `vector<>` 的开始和结束位置。因此,你可以使用以下代码来删除这些元素:
```c++
my_vector.erase(remove_if(my_vector.begin(), my_vector.end(), [&](vector<> &v) {
// 返回 true 表示需要删除这个元素
return some_condition(v);
}), my_vector.end());
```
在上面的代码中,`some_condition` 是一个可以确定哪些元素需要删除的谓词函数。在这个函数中,你可以检查 `vector<>` 中的元素是否符合要求,如果符合要求就返回 `true`,否则返回 `false`。
`remove_if` 函数会将满足 `some_condition` 的 `vector<>` 移动到容器的末尾,并返回一个指向新的末尾的迭代器。接着,`erase` 函数会删除这些元素,从而实现了循环删除 `vector<vector<>>` 中的指定结构体元素 `vector<>`。
阅读全文