std::cout如何输出结构体内容
时间: 2023-07-18 08:37:04 浏览: 564
在 C++ 中,可以使用 `std::cout` 输出结构体的内容。假设有如下定义的结构体:
```c++
struct Person {
std::string name;
int age;
};
```
可以使用以下代码输出结构体的内容:
```c++
Person p{"John", 30};
std::cout << "Name: " << p.name << ", Age: " << p.age << std::endl;
```
输出结果为:
```
Name: John, Age: 30
```
需要注意的是,在输出结构体成员变量时,要使用结构体变量名后紧跟成员变量名的方式,即 `p.name` 和 `p.age`。
相关问题
std::shared_ptr结构体
`std::shared_ptr` 并不是一个结构体,而是 C++11 引入的智能指针(smart pointer)之一,用于管理动态分配的内存。它是一个类模板,可以用于管理任意动态分配的对象。其主要特点是多个 `shared_ptr` 可以共享同一块内存,并且会自动在不再需要时释放它。
`std::shared_ptr` 的实现是基于计数引用(reference counting)的。每个 `shared_ptr` 都会有一个计数器,记录当前有多少个 `shared_ptr` 指向同一块内存。当所有的 `shared_ptr` 都不再需要这块内存时,它们会自动删除内存。
使用 `std::shared_ptr` 的示例代码如下:
```c++
#include <memory>
#include <iostream>
struct Foo {
Foo() { std::cout << "Foo::Foo\n"; }
~Foo() { std::cout << "Foo::~Foo\n"; }
void bar() { std::cout << "Foo::bar\n"; }
};
void f(const std::shared_ptr<Foo>& p) {
std::cout << "f: p.use_count() = " << p.use_count() << "\n";
}
int main() {
std::shared_ptr<Foo> p1 = std::make_shared<Foo>();
std::shared_ptr<Foo> p2 = p1;
std::shared_ptr<Foo> p3 = p1;
std::cout << "p1.use_count() = " << p1.use_count() << "\n";
std::cout << "p2.use_count() = " << p2.use_count() << "\n";
std::cout << "p3.use_count() = " << p3.use_count() << "\n";
f(p1);
p1->bar();
p2.reset();
p3.reset();
std::cout << "end\n";
}
```
输出结果如下:
```
Foo::Foo
p1.use_count() = 3
p2.use_count() = 3
p3.use_count() = 3
f: p.use_count() = 4
Foo::bar
Foo::~Foo
end
```
可以看到,`p1`、`p2`、`p3` 都指向同一块内存,共享计数器。在 `f` 函数中,`p` 也指向同一块内存,因此 `p.use_count()` 的值为 4。在程序结束时,由于没有任何 `shared_ptr` 指向内存,因此内存被自动释放,输出了 `Foo::~Foo`。
std::vector二维结构体设置
可以使用以下代码来定义一个二维结构体向量:
```c++
#include <iostream>
#include <vector>
using namespace std;
struct Student {
string name;
int age;
};
int main() {
vector<vector<Student>> students;
// 添加元素
vector<Student> group1;
group1.push_back({"Tom", 18});
group1.push_back({"Jack", 19});
students.push_back(group1);
vector<Student> group2;
group2.push_back({"Alice", 20});
students.push_back(group2);
// 访问元素
cout << students[0][0].name << " " << students[0][0].age << endl; // 输出 "Tom 18"
cout << students[0][1].name << " " << students[0][1].age << endl; // 输出 "Jack 19"
cout << students[1][0].name << " " << students[1][0].age << endl; // 输出 "Alice 20"
return 0;
}
```
在上面的代码中,我们定义了一个二维结构体向量 `students`,其中每个元素都是一个 `vector<Student>` 类型的向量,表示一组学生。我们可以通过 `push_back` 函数往二维向量中添加学生,也可以通过下标运算符访问二维向量中的学生。
阅读全文