std::vector 定义含自己struct自己类型的变量
时间: 2023-07-20 13:22:18 浏览: 54
可以定义含自己 `struct` 类型的变量,但是需要使用指针或引用来避免无限递归定义,否则会导致编译错误。例如:
```c++
struct Node {
int val;
std::vector<Node*> children; // 使用指针避免无限递归定义
};
int main() {
Node root;
Node node1, node2;
root.children.push_back(&node1);
root.children.push_back(&node2);
return 0;
}
```
在上面的例子中,`Node` 结构体中包含一个 `std::vector`,该向量存储了 `Node*` 类型的指针,而不是直接存储 `Node` 类型的对象。这样做可以避免无限递归定义,从而使编译器能够成功编译代码。
相关问题
struct Person { std::string name; std::vector<Person> children;
这是一个 C++ 的结构体定义,定义了一个名为 Person 的结构体,包含两个成员变量:一个名为 name 的字符串变量和一个名为 children 的 Person 类型的 vector(向量)变量。
其中 children 变量表示这个人有多个子女,每个子女也是一个 Person 类型的结构体,因此使用 vector 来存储。这样可以方便地对这个人及其子女进行操作和管理。
需要注意的是,由于 children 成员变量是一个 vector,因此在使用时需要包含 vector 头文件,即 #include <vector>。此外,结构体中的成员变量默认是 private 访问权限,因此需要在结构体定义之前添加关键字 public 才能在外部访问。
std::vector<结构体>如何赋值给结构体c++实例
可以通过循环遍历 `std::vector<结构体>` 中的每个元素,然后将每个元素的值分别赋给结构体实例的对应成员变量。
举个例子,假设有如下结构体和 `std::vector`:
```cpp
struct Person {
std::string name;
int age;
};
std::vector<Person> people = { {"Alice", 25}, {"Bob", 30}, {"Charlie", 35} };
Person p;
```
我们可以通过以下代码将 `people` 中的第一个元素赋值给 `p`:
```cpp
p.name = people[0].name;
p.age = people[0].age;
```
如果要将 `people` 中的所有元素赋值给 `p`,可以使用循环遍历,示例如下:
```cpp
for (const auto& person : people) {
p.name = person.name;
p.age = person.age;
// 这里可以使用 p 进行其他操作
}
```
需要注意的是,如果 `std::vector` 中的元素数量与结构体实例中的成员变量数量不一致,或者成员变量类型不匹配,可能会导致错误。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![ppt](https://img-home.csdnimg.cn/images/20210720083527.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.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)