C++结构体数组(无师自通)
数组元素也可以是结构体。当程序员想要存储一个包含多个数据字段的记录集但又不想使用对象时,这是很有用的。
因为结构体可以容纳多个不同数据类型的项目,所以可以使用单个结构体数组来代替几个常规变量数组。
结构体数组可以像其他数组一样定义。假设程序中存在以下结构声明:
因为结构体的成员默认是公共的,所以不需要像使用类对象一样使用一个函数来访问它们,而是可以通过简单地将点运算符和成员名称放在下标后面来访问任何元素的成员。
例如,下面的表达式引用了 bookList[5] 的 title 成员:
因为结构体可以容纳多个不同数据类型的项目,所以可以使用单个结构体数组来代替几个常规变量数组。
结构体数组可以像其他数组一样定义。假设程序中存在以下结构声明:
struct BookInfo { string title; string author; string publisher; double price; };以下语句定义了一个名为 bookList 的数组,它有 20 个元素,每个元素都是一个 BookInfo 结构体。
BookInfo bookList[20];
数组中的每个元素都可以通过下标来访问。例如,bookList[0] 是数组中的第一个结构体,bookList[1] 是第二个结构体,依此类推。因为结构体的成员默认是公共的,所以不需要像使用类对象一样使用一个函数来访问它们,而是可以通过简单地将点运算符和成员名称放在下标后面来访问任何元素的成员。
例如,下面的表达式引用了 bookList[5] 的 title 成员:
bookList[5].title
以下循环遍历数组,显示存储在每个元素中的信息:for (int index = 0; index < 20; index++) { cout << bookList[index].title << endl; cout << bookList[index].author << endl; cout << bookList[index].publisher << endl; cout << bookList[index].price << endl << endl; }因为成员 title、author 和 publisher 都是 string 对象,所以组成字符串的各个字符也可以被访问。以下语句显示 bookList [10] 的 title 成员的第一个字符:
cout << bookList[10].title[0];
以下语句可将字符 t 存储在 bookList[2] 的 publisher 成员的第 4 个位置。bookList[2].publisher[3] ='t';
下面的程序将计算和显示一组员工的收入信息,它使用了一个单一的结构体数组:// This program uses an array of structures to hold payroll data. #include <iostream> #include <iomanip> using namespace std; struct PayInfo // Define a structure that holds 2 variables { int hours; // Hours worked double payRate; // Hourly pay rate }; int main () { const int NUM_EMPS = 3; // Number of employees PayInfo workers[NUM_EMPS];// Define an array of Paylnfo structures double grossPay; // Get payroll data cout << "Enter the hours worked and hourly pay rates of "<< NUM_EMPS << " employees. \n"; for (int index = 0; index < NUM_EMPS; index++) { cout << "\nHours worked by employee #" << (index + 1) << ":"; cin >> workers[index].hours; cout << "Hourly pay rate for this employee: $"; cin >> workers[index].payRate; } // Display each employeef s gross pay cout << "\nHere is the gross pay for each employee:\n"; cout << fixed << showpoint << setprecision(2); for (int index = 0; index < NUM_EMPS; index++) { grossPay = workers[index].hours * workers[index].payRate; cout << "Employee #" << (index + 1); cout << ": $" << setw(7) << grossPay << endl; } return 0; }程序输出结果:
Enter the hours worked and hourly pay rates of 3 employees.
Hours worked by employee #1:10
Hourly pay rate for this employee: $9.75
Hours worked by employee #2:15
Hourly pay rate for this employee: $8.65
Hours worked by employee #3:20
Hourly pay rate for this employee: $10.50
Here is the gross pay for each employee:
Employee #1: $ 97.50
Employee #2: $ 129.75
Employee #3: $ 210.00
struct PayInfo { int hours; //己工作的小时数 double payRate; // 每小时收入 PayInfo (int h = 0, double p = 0.0) // 构造函数 { hours = h; payRate = p; } };使用这个结构体声明,原程序中的数组现在可以初始化如下:
PayInfo workers[NUM_EMPS] = { PayInfo(10, 9.75),PayInfo(15, 8.65),PayInfo(20, 10.50)};
请注意,初始化结构体数组中的成员的语法与初始化对象数组中的成员的语法相同。这与初始化单个结构体的语法不同。所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算