结构体数组二次赋值
时间: 2025-05-01 18:32:36 浏览: 46
### C/C++ 中结构体数组的二次赋值方法
在 C/C++ 编程语言中,对结构体数组进行二次赋值是一种常见的需求。以下是实现这一功能的具体方式。
#### 使用循环逐个赋值
可以通过 `for` 循环逐一访问结构体数组中的每一个元素,并对其成员变量重新赋值。这种方式简单直观,适用于大多数情况[^1]。
```cpp
#include <iostream>
using namespace std;
struct node {
int num;
char c;
};
int main() {
int n = 3; // 假设有三个节点
vector<node> a(n);
// 初始赋值
for (int i = 0; i < n; ++i) {
a[i].num = i * 2;
a[i].c = 'A' + i;
}
// 输出初始值
cout << "Initial values:\n";
for (int i = 0; i < n; ++i) {
cout << "a[" << i << "]: num=" << a[i].num << ", c=" << a[i].c << "\n";
}
// 对结构体数组进行二次赋值
for (int i = 0; i < n; ++i) {
a[i].num += 10; // 修改 num 成员
a[i].c = 'X'; // 修改 c 成员
}
// 输出修改后的值
cout << "After reassignment:\n";
for (int i = 0; i < n; ++i) {
cout << "a[" << i << "]: num=" << a[i].num << ", c=" << a[i].c << "\n";
}
}
```
上述代码展示了如何通过循环对结构体数组的各个字段进行更新操作。
---
#### 使用标准库算法 `std::transform`
如果希望更简洁地完成批量赋值任务,可以借助 STL 提供的标准算法 `std::transform` 来简化逻辑[^4]。
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct node {
int num;
char c;
};
// 自定义转换函数
void updateNode(node& elem) {
elem.num += 10; // 更新 num 字段
elem.c = 'Y'; // 更新 c 字段
}
int main() {
int n = 3;
vector<node> a(n);
// 初始化结构体数组
for (int i = 0; i < n; ++i) {
a[i].num = i * 2;
a[i].c = 'A' + i;
}
// 批量应用自定义转换函数
transform(a.begin(), a.end(), a.begin(), [](node& elem) -> node {
elem.num += 10; // 修改 num
elem.c = 'Z'; // 修改 c
return elem;
});
// 输出结果
for (int i = 0; i < n; ++i) {
cout << "a[" << i << "]: num=" << a[i].num << ", c=" << a[i].c << "\n";
}
}
```
此方法利用了 Lambda 表达式和 `std::transform` 的组合来高效处理大批量的数据重置工作。
---
#### 复杂场景下的嵌套结构体赋值
当涉及到嵌套结构体时,可以直接访问内部结构体并对其进行单独赋值[^3]。
```cpp
#include <iostream>
#include <string>
using namespace std;
struct student {
string name;
int age;
int score;
};
struct teacher {
int id;
string name;
int age;
student stu;
};
int main() {
teacher t1;
// 初次赋值
t1.id = 1;
t1.name = "Mr. Wang";
t1.age = 50;
t1.stu.name = "Tom";
t1.stu.age = 18;
t1.stu.score = 95;
// 二次赋值
t1.id = 2;
t1.name = "Ms. Li";
t1.age = 45;
t1.stu.name = "Jerry"; // 子结构体重赋值
t1.stu.age = 17;
t1.stu.score = 88;
// 输出最终状态
cout << "Teacher ID: " << t1.id << "\n"
<< "Name: " << t1.name << "\n"
<< "Age: " << t1.age << "\n"
<< "Student Name: " << t1.stu.name << "\n"
<< "Student Age: " << t1.stu.age << "\n"
<< "Score: " << t1.stu.score << "\n";
return 0;
}
```
这段代码演示了如何在一个嵌套结构体内对外部以及内部成员分别执行两次不同的赋值操作。
---
阅读全文
相关推荐


















